首页 > 解决方案 > 为什么我会收到此错误错误状态:使用 Firestore 时 DocumentSnapshotPlatform 中不存在字段?

问题描述

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

相关的导致错误的小部件是 StreamBuilder<QuerySnapshot<Object?>> 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();
            }
          },
        )

为什么我会收到此错误?

这是我的文件的图像

在此处输入图像描述>

标签: flutterdartfirebase-realtime-databasegoogle-cloud-firestore

解决方案


doc.get如果指定的字段在文档中不存在,将返回此错误。所以你的一个领域:id, title, description(或更多)不能在doc.

您可以添加断点或日志并检查doc.data()内部的结果.map((doc)...以查看其中包含的内容。

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

编辑:

根据评论中的错误图片,错误似乎在其他地方,您将值分配给documents. snapshot.data!.docs具有类型List<QueryDocumentSnapshot<Object?>>而不是`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();
    }
    },
)



推荐阅读