我有一个调用 Future<bool>
函数的函数:
bool checkId(String id, context) {
bool ret;
checkMissingId(id, context).then((value) => ret = value);
return ret;
那叫:
Future<bool> checkMissingId(String id, context) async {
String str = id.toLowerCase();
String letter = str[0];
if (checkStr(id, letter, str) == false)
return false; //checks some rules on strings
else {
try {
var data = await FirebaseFirestore.instance
.collection("ids/tabs/" + letter)
.doc(str)
.get();
if (data.exists) {
return false;
} else
return true;
} catch (e) {
await showErrDialog(context, e.code);
return false;
}
}
}
ret
返回 null
,而不是布尔值。
编辑:checkId 的类型必须是 bool
,而不是 Future<bool>
答案 0 :(得分:1)
因为当 null
函数返回时它是 checkId
。您应该等待操作,如下所示:
Future<bool> checkId(String id, context) async {
bool ret = await checkMissingId(id, context);
return ret;
}
答案 1 :(得分:0)
在返回 checkMissingId
变量之前,您需要暂停程序的执行以让 ret
方法完成。为此,您可以使用 await
关键字并将函数标记为 async
。
您应该将代码更改为:
Future<bool> checkId(String id, context) async {
bool ret = await checkMissingId(id, context);
return ret;
}