来自 Firebase 的 Flutter 返回文档长度

PJQ*_*Jag 2 firebase flutter google-cloud-firestore

我试图用这个函数返回文档列表的长度:

Future totalLikes(postID) async {
    var respectsQuery = Firestore.instance
        .collection('respects')
        .where('postID', isEqualTo: postID);
      respectsQuery.getDocuments().then((data) {
      var totalEquals = data.documents.length;
      return totalEquals;
    });
  }
Run Code Online (Sandbox Code Playgroud)

我在 void init 状态下初始化它(使用另一个函数调用:

void initState() {

    totalLikes(postID).then((result) {
      setState(() {
        _totalRespects = result;
      });
    });


  }
Run Code Online (Sandbox Code Playgroud)

但是,当它运行时,它最初返回一个空值,因为它没有时间完全完成。我试图在 Future 函数中的 Firestore 调用之前退出“等待”,但得到“仅等待期货”的编译错误。

任何人都可以帮助我理解如何在设置“_totalRespsects”状态之前等待此函数完全返回非空值?

谢谢!

Fra*_*len 10

我想你正在寻找这个:

Future totalLikes(postID) async {
  var respectsQuery = Firestore.instance
      .collection('respects')
      .where('postID', isEqualTo: postID);
  var querySnapshot = await respectsQuery.getDocuments();
  var totalEquals = querySnapshot.documents.length;
  return totalEquals;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这会加载所有文档,只是为了确定文档数量,这是非常浪费的(尤其是当您获得更多文档时)。考虑保留一个文档,将计数作为一个字段进行维护,这样您只需阅读单个文档即可获得计数。请参阅Firestore 文档中的聚合查询分布式计数器