Flutter firestore QuerySnapshot 在 Android 中没有 getter 'documents' 实例

时间:2021-01-13 15:55:44

标签: android firebase flutter dart google-cloud-firestore

我正在尝试从 Firestore 云中检索变量的值。通过实现代码,我似乎遇到了一个错误,我花了几个小时为此感到沮丧?,试图在这里和其他地方找到解决方案。我在代码旁边遇到的错误如下所示。

在构建 StreamBuilder(dirty, state:_StreamBuilderBaseState#4939b) 时抛出了以下 NoSuchMethodError: “QuerySnapshot”类没有实例获取器“文档”。 接收器:“QuerySnapshot”的实例 尝试调用:documents

Error Displayed on the Virtual Device

我正在使用的代码:

 Widget buildStreamBuilder() {
     return Container(
        child: !_success
            ? Center(
          child: CircularProgressIndicator(
            valueColor: AlwaysStoppedAnimation<Color>(Colors.green),
          ),
        )
            : StreamBuilder(
          stream: FirebaseFirestore.instance.collection('sensors').snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) {
              return Center(
                child: CircularProgressIndicator(
                  valueColor: AlwaysStoppedAnimation<Color>(Colors.red),
                ),
              );
            } else {
              snapshot.data.documents.forEach((doc) {
                if (doc.documentID == 'cSBKpiEe1XKmQC8BDzMk') {
                  print('current value = ${doc['BatStat']}'); //var1
                  globalCurrentSensorValue = doc['BatStat'].toDouble();
                }
              });
              return Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Expanded(
                      flex: 1,
                      child: Container(),
                    ),
                    Expanded(
                      flex: 1,
                      child: Container(),
                    )
                  ],
                ),
              );
            }
          },
        ));
  }

2 个答案:

答案 0 :(得分:5)

改变这个:

snapshot.data.documents.forEach((doc)

进入这个:

snapshot.data.docs.forEach((doc)

QuerySnapshot 类包含一个名为 docs 的属性,它将返回集合中的所有文档。

答案 1 :(得分:0)

如果我没记错的话,您是在错误地访问文档数据。 试试这个:

 if (doc.documentID == 'cSBKpiEe1XKmQC8BDzMk') {
              //use doc.data()[' '] method
              print('current value = ${doc.data()['BatStat']}'); //var1
              globalCurrentSensorValue = doc.data()['BatStat'].toDouble();
            }