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){
在列中,所以不会调用它。