【问题标题】:Cannot get documents or docs with cloud firestore : ^2.1.0 flutter无法使用 Cloud Firestore 获取文档或文档:^2.1.0 颤动
【发布时间】:2021-08-06 05:51:03
【问题描述】:

我刚刚升级到cloud firestore: ^2.1.0,在snapshots.data?.documentssnapshots.data?.docs 上出现错误消息getter 'documents' 没有为'Object' 类型定义。在上面的代码中:

@override
  Widget build(BuildContext context) {
    return StreamBuilder(
      stream: FirebaseFirestore.instance.collection('Courses').snapshots(),
      builder: (context1, snapshot) {
        //just add this line
        if (snapshot.data == null) return CircularProgressIndicator();
        return ListView.builder(
          itemCount: snapshot.data?.documents.length,
          itemBuilder: (context2, index) {
            return GestureDetector(
              onTap: () => Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (context) => DetailCourseScreen(
                      snapshot.data?.documents[index]['title'],
                      snapshot.data?.documents[index]['storage'],
                      index),
                ),
              ),
              child: _buildCourseList(
                  context2, snapshot.data?.documents[index], index),
            );
          },
        );
      },
    );
  }

这是我的pubspec.yaml

environment:
  sdk: '>=2.12.0 <3.0.0'

dependencies:

  cloud_firestore: ^2.1.0
  firebase_core: ^1.1.1
  firebase_storage: ^8.0.6
  firebase_image: ^1.0.1

【问题讨论】:

    标签: firebase flutter google-cloud-firestore dart-null-safety flutter2.0


    【解决方案1】:

    我理解你的困惑。自从 cloud_firestore 2.0.0 更新以来,访问 cloud firestore 的数据变得有点奇怪。您可以使用以下代码访问您的数据:

    StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
          stream: FirebaseFirestore.instance
              .collection('Courses')
              .withConverter<Map<String, dynamic>>(
                fromFirestore: (snapshot, _) => snapshot.data() ?? Map<String, dynamic>(),
                toFirestore: (model, _) => Map<String, dynamic>.from(model as Map),
              )
              .snapshots(),
          builder: (context, snapshot) {
            if (snapshot.data == null) return CircularProgressIndicator();
            return ListView.builder(
              itemCount: snapshot.data?.docs.length,
              itemBuilder: (context2, index) {
                return GestureDetector(
                  onTap: () => Navigator.of(context).push(
                    MaterialPageRoute(
                      builder: (context) => DetailCourseScreen(
                          snapshot.data?.docs[index].data()['title'],
                          snapshot.data?.docs[index].data()['storage'],
                          index),
                    ),
                  ),
                  child: _buildCourseList(context2, snapshot.data?.docs[index].data(), index),
                );
              },
            );
          },
        );
    

    您可以在此处阅读有关此更新的更多信息:https://pub.dev/packages/cloud_firestore/changelog#200

    【讨论】:

    • 非常感谢,我想为您的答案投票,但不要计入。为了更精确并确保任何人都可以简单地复制粘贴,我想根据我的 IDE 的错误来编辑你的答案(只需要空检查:)):.withConverter&lt;Map&lt;String, dynamic&gt;&gt;( fromFirestore: (snapshot, _) =&gt; snapshot.data() **?? Map&lt;String, dynamic&gt;()**, toFirestore: (model, _) =&gt; Map&lt;String, dynamic&gt;.from(model as Map), )
    • @Xsims 感谢您的编辑!惊人的团队合作!我已批准修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2021-11-23
    • 1970-01-01
    • 2018-08-24
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多