Firebase 异步未来在我的代码中不起作用。如何修复它?

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",

此函数始终返回null,但正在加载数据,但不等待Firestore读取。如何解决这个问题?

 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;
}