Flutter 颤振:错误:';等待&x27;只能用于';异步';或';异步*';方法。甚至认为这个方法是异步的

Flutter 颤振:错误:';等待&x27;只能用于';异步';或';异步*';方法。甚至认为这个方法是异步的,flutter,Flutter,我有这个方法: Future<AppUser> _getUser(String documentId) async { var document = await firestore.collection('customers').doc(documentId); document.get().then((DocumentSnapshot documentSnapshot) { print(documentSnapshot.data());

我有这个方法:

Future<AppUser> _getUser(String documentId) async {
    var document = await firestore.collection('customers').doc(documentId);
    document.get().then((DocumentSnapshot documentSnapshot) {
          print(documentSnapshot.data());
    });
    AppUser bruceUser = AppUser(userId: 'user006',);

    return bruceUser;   
}
AppUser _user = await _getUser(document.id);
但是,这将返回以下错误:

Error: 'await' can only be used in 'async' or 'async*' methods.
我做错了什么?我不想将_user改为Future,因为它会使代码进一步复杂化,所以为什么wait不起作用呢?

\u getUser()
是一个asnyc函数,但不是调用函数。 您收到的错误表明,
await
已在非异步函数中使用。 如果在将调用者函数转换为异步时遇到困难,请尝试使用
然后使用
,如下所示

snapshot.data.docs.map((DocumentSnapshot document) {
    _getUser(document.id).then((user) {
          //code here
    });
}
总之,有两种解决方案

  • 将调用者函数转换为
    async
  • 使用
    \u getUser()。然后((用户){})

  • 您正在调用的函数如何
    AppUser\u user=wait\u getUser(document.id)?它是异步的吗?@JustCode,不是。它是一个
    snapshot.data.docs.map((DocumentSnapshot document){
    函数。我尝试使它异步,但它返回
    错误:参数类型“List”不能分配给参数类型“List”
    那么这就是问题所在,为什么不尝试
    \getUser(document.id)。然后((user){//code here)
    @JustCode我是否将快照放在
    中,然后
    ?这是否回答了您的问题?由于_getUser()中的等待,运行时间太长,因此我得到
    “列的子项不能包含任何空值,但在索引0中找到了空值”
    。我在
    文档中的getUser()中放了一条print语句。get()
    \u getUser(document.id)之前的一个。然后((user){
    和它的内部。打印之前的一个,然后我得到一个错误,然后内部的一个打印,最后是内部的_getUser()打印。您是否使用此回调中的数据来构建
    小部件?在这种情况下,您必须使用未来的生成器,或者在收到异步回调中的数据之前保持列构建过程。如何保持列构建过程?借助
    状态小部件
    和单个布尔值,您可以chive相同。基于布尔值,您可以显示列数据或加载小部件。我正在尝试,但再次失败。因为
    snapshot.data.docs.map((DocumentSnapshot document){
    在列中,所以不会调用它。