Firebase的文档返回长度波动

时间:2018-11-12 02:37:22

标签: 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;
    });
  }

我将其初始化为void init状态(使用另一个函数调用:

void initState() {

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


  }

但是,当它运行时,由于没有时间完全完成,它最初返回一个空值。我曾尝试在Future函数中的Firestore调用之前取消“等待”,但是出现“仅等待期货”的编译错误。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找这个:

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

请注意,这将加载所有文档,只是为了确定文档数量,这是非常浪费的(尤其是您获得更多文档时)。考虑将一个文档保存在一个字段中,以保持其计数,这样您只需读取一个文档即可获得该计数。请参阅Firestore文档中的aggregation queriesdistributed counters