Firebase 异步未来在我的代码中不起作用。如何修复它?
此函数始终返回null,但正在加载数据,但不等待Firestore读取。如何解决这个问题?Firebase 异步未来在我的代码中不起作用。如何修复它?,firebase,flutter,geofirestore,Firebase,Flutter,Geofirestore,此函数始终返回null,但正在加载数据,但不等待Firestore读取。如何解决这个问题? Future<HomePage> read({ String pageName,String mAppId})async{ await Firestore.instance .collection('tablePages') .where('projectId', isEqualTo: mAppId) .where("page.title",
Future<HomePage> read({ String pageName,String mAppId})async{
await Firestore.instance
.collection('tablePages')
.where('projectId', isEqualTo: mAppId)
.where("page.title", isEqualTo:pageName)
.snapshots()
.listen((data) async{
if (data.documents != null
? data.documents.length > 0
? data.documents[0].data != null
: false
: false) {
return HomePage.fromJson(
data.documents[0].data['page']);
} else {
return null;
}
//break;
}).onError((error){
print(error);
return null;
});
}
}
未来读取({String pageName,String mAppId})异步{
等待Firestore.instance
.collection('tablePages')
.where('projectd',isEqualTo:mAppId)
.where(“page.title”,isEqualTo:pageName)
.快照()
.listen((数据)异步{
if(data.documents!=null
?data.documents.length>0
?data.documents[0]。data!=null
:错
:false){
返回HomePage.fromJson(
data.documents[0]。数据['page']);
}否则{
返回null;
}
//中断;
}).onError((错误){
打印(错误);
返回null;
});
}
}
尝试以下操作:
Future<HomePage> read({String pageName, String mAppId}) async {
Stream<QuerySnapshot> snap = Firestore.instance
.collection('tablePages')
.where('projectId', isEqualTo: mAppId)
.where("page.title", isEqualTo: pageName)
.snapshots();
await for (var data in snap) {
if (data.documents != null
? data.documents.length > 0 ? data.documents[0].data != null : false
: false) {
return HomePage.fromJson(data.documents[0].data['page']);
} else {
return null;
}
}
}
未来读取({String pageName,String mAppId})异步{
Stream snap=Firestore.instance
.collection('tablePages')
.where('projectd',isEqualTo:mAppId)
.where(“page.title”,isEqualTo:pageName)
.快照();
等待(快照中的var数据){
if(data.documents!=null
?data.documents.length>0?data.documents[0]。数据!=null:false
:false){
返回HomePage.fromJson(data.documents[0].data['page']);
}否则{
返回null;
}
}
}
从文档中:
流可以以多种方式创建,这是另一篇文章的主题,但它们都可以以相同的方式使用:异步for循环(通常称为wait for)迭代流的事件,就像for循环迭代Iterable一样。例如:
Future-sumStream(Stream-Stream)异步{
var总和=0;
等待(流中的var值){
总和+=数值;
}
回报金额;
}
这段代码只接收整数事件流中的每个事件,将它们相加,然后返回(未来的)总和。当循环体结束时,函数暂停,直到下一个事件到达或流结束
我认为firebase快照是流式的,所以您不能等待。Viren是正确的。如果您想等待数据,请使用
get()
@Midhilaj尝试我的答案了吗?没有,由于延迟,我使用另一个逻辑来解决此问题。我将尝试你的答案,并接受它,如果它是工作的罚款以后
Future<int> sumStream(Stream<int> stream) async {
var sum = 0;
await for (var value in stream) {
sum += value;
}
return sum;
}