Flutter Firestore-未为类型“流”定义方法“文档”

时间:2020-06-11 15:15:01

标签: flutter asynchronous google-cloud-firestore

我试图遍历文档中的集合(使用for循环),并从每个集合文档中获取和捕获数据。当我第一次尝试这样做时,我使用流来侦听数据,但是由于异步函数,该函数将始终返回空数组。

我的代码

for (final day in daysRunOn) {
  databaseReference
      .collection('users')
      .document(user.uid)
      .collection(day)
      .snapshots()
      .documents((snapshot) {

      });

}

This post建议我不要使用流,因此将其删除。我现在尝试运行此文件,但是.documents部分上一直出现错误,提示“未为类型'Stream'定义'documents'方法。”但我不明白这仍然是怎么回事。

堆栈溢出的建议方法

double queryValues() async {
  total = 0.0;

  docs = await Firestore.instance
      .collection('myCollection')
      .snapshots()
      .documents((snapshot);
   docs.forEach((doc) => this.total += doc.data['amount']));
   debugPrint(this.total.toString());
   return total;
  }

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

尝试此代码

    List<String> daysRunOn = ['day1','day2','...'];
    int x = 0;
    double total = 0.0;

    Future<double> getTotal() async {
     if(x == 0) total = 0.0;
     var querySnapshot = await 
       Firestore.instance.collection('users/${user.uid}/${daysRunOn[x]}').getDocuments();
     querySnapshot.documents.forEach((doc) => total += doc.data['amount']);
     if(x == daysRunOn.length-1){
       //  the loop has finished
       x = 0;
       debugPrint(total.toString());
       return total;
     } else {
       x++;
       return getTotal();
     }
   }

答案 1 :(得分:0)

尝试这样的事情:

getDocs() async { 
  total = 0.0;

  snapshot = await Firestore.instance
      .collection('myCollection')
      .snapshots();

  docs = snapshot.data.documents;
  docs.forEach((doc) => this.total += doc.data['amount']));
  debugPrint(this.total.toString());
  return total;
}