【问题标题】:Flutter firestore QuerySnapshot has no instance of getter 'documents' in AndroidFlutter firestore QuerySnapshot 在 Android 中没有 getter 'documents' 的实例
【发布时间】:2021-04-18 16:05:58
【问题描述】:

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

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

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(),
                    )
                  ],
                ),
              );
            }
          },
        ));
  }

【问题讨论】:

  • 正如彼得所回答的:该属性已从 documents 重命名为 docs。我建议将reference docs 保持打开状态,因为它们可以让您更轻松地自行解决此类问题。 migration guide 中也提到过:“已弃用:documents 已弃用,取而代之的是 docs
  • 您好 ZenithAoa,欢迎来到 StackOverFlow。您的问题看起来非常好并且格式正确。关于截图只有一个花絮。外部链接可能是短暂的,因此如果您可以直接在问题中显示图片会很好。干得好。
  • @Frank,感谢您提供的信息。由于我是 Flutter/Dart 环境的新手,所以这对我来说是相当困难的。从来不知道参考文档如此有用,能够让我在上述问题之后的几分钟内解决一些问题。

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


【解决方案1】:

改变这个:

snapshot.data.documents.forEach((doc)

进入这个:

snapshot.data.docs.forEach((doc)

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-07
      • 2022-06-15
      • 2020-12-21
      • 2020-10-21
      • 2021-03-01
      • 2021-05-18
      • 2020-10-19
      相关资源
      最近更新 更多