为啥我会收到此错误错误状态:使用 Firestore 时 DocumentSnapshotPlatform 中不存在字段?

Posted

技术标签:

【中文标题】为啥我会收到此错误错误状态:使用 Firestore 时 DocumentSnapshotPlatform 中不存在字段?【英文标题】:Why am I getting this error Bad state: field does not exist within the DocumentSnapshotPlatform while using firestore?为什么我会收到此错误错误状态:使用 Firestore 时 DocumentSnapshotPlatform 中不存在字段? 【发布时间】:2021-11-15 16:03:44 【问题描述】:

错误状态:DocumentSnapshotPlatform 中不存在字段

相关的导致错误的小部件是 StreamBuilder> StreamBuilder:file:///D:/EgoPro/Flutter%20Apps/task_app/lib/screens/task_screen.dart:189:13 这是错误

        StreamBuilder<QuerySnapshot>(
          // <2> Pass `Stream<QuerySnapshot>` to stream
          stream:
              FirebaseFirestore.instance.collection('tasks').snapshots(),
          builder: (context, AsyncSnapshot<dynamic> snapshot) 
            if (snapshot.hasData) 
              // <3> Retrieve `List<DocumentSnapshot>` from snapshot
              final List<DocumentSnapshot> documents = snapshot.data!.docs;
              print(documents);
              return ListView(
                  shrinkWrap: true,
                  physics: NeverScrollableScrollPhysics(),
                  children: documents
                      .map(
                        (doc) => Meetingcard(
                            id: doc.get("id"),
                            title: doc.get("title"),
                            description: doc.get("description"),
                            time: TimeOfDay.now()),
                      )
                      .toList());
             else if (snapshot.hasError) 
              return Text("'It's Error!'");
             else 
              return CircularProgressIndicator();
            
          ,
        )

为什么会出现这个错误?

This is the image of my documents

enter image description here>

【问题讨论】:

【参考方案1】:

doc.get 如果文档中不存在指定的字段,将返回此错误。所以你的一个字段:idtitledescription(或更多)在doc中找不到。

您可以添加断点或日志并检查doc.data() 的结果在您的.map((doc)... 中,看看它包含什么。

(处理可选字段的一种可能方法是定义一个模型类,创建处理缺失值并分配空字符串或其他默认值的转换器,因此当您从流中读取数据时,您可以使用此模型,并且您不必在那里处理缺失值。)

编辑:

根据评论中的错误图片,错误似乎在其他地方,您将值分配给documentssnapshot.data!.docs 的类型为 List&lt;QueryDocumentSnapshot&lt;Object?&gt;&gt; 而不是 `List。试试下面的代码:

StreamBuilder<QuerySnapshot>(
    // <2> Pass `Stream<QuerySnapshot>` to stream
    stream:
        FirebaseFirestore.instance.collection('tasks').snapshots(),
    builder: (context, AsyncSnapshot<dynamic> snapshot) 
    if (snapshot.hasData) 
        // <3> Retrieve `List<DocumentSnapshot>` from snapshot
        return ListView(
            shrinkWrap: true,
            physics: NeverScrollableScrollPhysics(),
            children: snapshot.data!.docs
                .map(
                (DocumentSnapshot doc) => Meetingcard(
                    id: doc.data()!["id"],
                    title: doc.data()!["title"],
                    description: data()!["description"],
                    time: TimeOfDay.now()),
                )
                .toList());
     else if (snapshot.hasError) 
        return Text("'It's Error!'");
     else 
        return CircularProgressIndicator();
    
    ,
)


【讨论】:

我的firestore中有这些字段,我也有交叉检查 你检查doc.data()的结果了吗? 当我单独访问时,我正在获取值,但它仍然显示此错误 当我使用 doc.data() 它显示空检查错误 您能否将doc.map 中的全部内容添加到您的问题中?

以上是关于为啥我会收到此错误错误状态:使用 Firestore 时 DocumentSnapshotPlatform 中不存在字段?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到此错误?返回标签错误(页面没有链接回来)

NPM 启动错误上的 ENOENT。为啥我会收到此错误,为啥要查找“我的图片”目录?

为啥我会收到此错误

知道为啥我会收到此错误吗?

为啥我会收到此错误 - “您正在使用未定义的组件调用 withTheme(Component)。” -反应JS

为啥我会收到此语法错误? (Python)