【问题标题】:Getting a field value from known document in firebase flutter从firebase颤振中的已知文档中获取字段值
【发布时间】:2021-09-07 06:52:57
【问题描述】:

我希望用户在我的应用中提供一个值,并让其他用户看到它。但是我可以将数据上传到firebase,但不能在另一边获取。我在颤振上启用了空安全。代码是:-

child: StreamBuilder(
stream:FirebaseFirestore.instance.collection('Collection name').doc('doc id').snapshots()
                  builder: (context, snapshot){
                    if(snapshot.hasData){
                      return Text(snapshot.data['Field name'].toString());  // here my editor shows error saying 'The method '[]' can't be unconditionally invoked because the receiver can be 'null'.' and asks for a null check and then shows error again
                    }
                    return Text('Nothing');
                  }
                ),

编辑:我得到的只有 'type '_JsonDocumentSnapshot' is not a subtype of type 'Map' in type cast' 作为错误

如果我改变了

if(snapshot.hasData){
                      return Text(snapshot.data['Field name'].toString()); 

if (snapshot.hasData) {
                        return Text(snapshot.data.toString());
                      }

我得到的输出为 '_JsonDocumentSnapshot' 的实例'' 数据应该在哪里。 我正在使用空检查飞镖

【问题讨论】:

  • firebasedb 等于什么?同时分享数据库截图
  • firebasedb 等于 FirebaseFirestore.instacne.collection('collection').snapshot();抱歉,由于可能点的一些问题,我无法获得屏幕截图。 IDK 那是什么,我是新手。那里只有一个文档。我已经更新了请看

标签: flutter google-cloud-firestore


【解决方案1】:

感谢大家的支持,但我偶然发现并回答了。我读到它的数据类型是 DocumentSnapshot,这对我有用

builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    var numGuess = snapshot.data as DocumentSnapshot;
                    return Text(numGuess['Field name'].toString());
                  }
                  return Text('Nothing');
                }
This works for null safety.

【讨论】:

    【解决方案2】:

    既然您正在检索一个集合,那么请尝试以下操作:

    return Text(snapshot.data!.docs[0].data()["Field Name"]);
    

    一个集合将返回一个文档列表,因此使用docs 属性可以访问该文档。上面的代码会显示列表中第一个文档中的字段,最好使用listview返回所有文档。

    检查:

    https://api.flutter.dev/flutter/widgets/ListView-class.html

    【讨论】:

    • 没有为“对象”类型定义吸气剂“文档”。这是我在尝试此代码时遇到的错误。我需要一个特殊的图书馆吗?我正在使用 Cloud Firestore 和 Firebase 核心。
    • 会不会是库或者更新的问题。如何更新所有内容?
    • 如果重要的话,我的 firebase 中有一个集合,里面有一个文档,里面有 2 个变量
    • @AnirudhAgrawal 执行以下操作child: StreamBuilder<QuerySnapshot<Map<String, dynamic>>(
    【解决方案3】:

    像这样为您的 StreamBuilder 提供数据类型

    StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>(
                stream:
                    FirebaseFirestore.instance.collection('Collection name').doc('doc id').snapshots(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    return Text(snapshot.data?.data()?['Field name']);
                  }
                  return Text('Nothing');
                },
              ),
    

    【讨论】:

    • 这是我在尝试您的代码时遇到的错误。没有为“对象”类型定义方法“数据”。 (文档)尝试将名称更正为现有方法的名称,或定义名为“数据”的方法。感谢您的尝试。
    • 会不会是库或者更新的问题。如何更新所有内容?
    • 您的项目支持空安全吗?您使用的是哪个 cloud_firestore 版本?
    • 如果重要的话,我的 firebase 中有一个集合,里面有一个文档,里面有 2 个变量
    • 如何找到firestore版本?
    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    相关资源
    最近更新 更多