Future 仍然返回 null Flutter

时间:2021-02-19 16:54:05

标签: flutter dart asynchronous

我有一个调用 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>

2 个答案:

答案 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;
}
相关问题