await 表达式只能在异步函数中使用

Aug*_*ski 5 asynchronous dart flutter google-cloud-firestore

我试图在用户登录时从 Firestore 加载一些数据,并且需要等到数据加载后再继续。但是,我等待结果的努力没有奏效。

Future<bool> userListener() async {
  _auth.onAuthStateChanged.listen((firebaseUser) {
    bool isDone = false; 

    if (firebaseUser != null) {
      isDone = await loadUserData(firebaseUser);   // This line is killing me!!
      return isDone;
    } else {
      return false;
    }
  }, onError: (error) {
    print('error in UserListener: $error');
  });
}

Future<bool> loadUserData(FirebaseUser user) async {
  Firestore database = Firestore();
  DocumentReference data = database.collection('userData').document(user.uid);

  try {
    DocumentSnapshot myQuery = await data.get();
    theNumber = myQuery.data['theNumber'];
    return true;
  } on PlatformException catch (e) {
    print(e);
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

我从行中得到一个可爱的错误:

 isDone = await loadUserData(firebaseUser);
Run Code Online (Sandbox Code Playgroud)

等待表达式只能用于异步函数”。

我不确定这些函数如何变得更加异步。此外,如果我不添加,await那么我会被告知不能将 Future 分配给 bool,这是完全有道理的,并向我建议我的函数实际上是异步的。

为什么我不能等待我的loadUserData函数的结果?

小智 6

该行的主要函数是传递给 onAuthStateChanged 的​​监听。这个函数也应该是异步的,如下所示

  _auth.onAuthStateChanged.listen((firebaseUser) async{
Run Code Online (Sandbox Code Playgroud)