【问题标题】:Unable to read data from the Cloud Firestore in my flutter application无法在我的颤振应用程序中从 Cloud Firestore 读取数据
【发布时间】:2021-07-09 15:50:55
【问题描述】:

我尝试将我的 Flutter 应用与 Cloud Firestore 集成。在一个页面上,在应用程序中,我只想从云存储中读取数据并将其打印在该页面上。我是新手,对制作后端知之甚少,所以我尝试了一些来自 youtube 的教程,还阅读了一些关于 StackOverflow 的文章,但我仍然无法从云 Firestore 中读取数据。所以我认为我在某个地方犯了一个错误。以下是我对应用所做的所有 sn-ps 和更改。

这就是我的 Firestore 数据的样子:

  [1]: https://i.stack.imgur.com/lPZtx.png

这是我想从 Firestore 云打印数据的页面。

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';

class ListPage extends StatefulWidget {
  @override
  _ListPageState createState() => _ListPageState();
}

class _ListPageState extends State<ListPage> {
  Future getPosts() async {
    var firestore = FirebaseFirestore.instance;

    QuerySnapshot qn = await firestore.collection("events").get();

    return qn.docs;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: FutureBuilder(
        future: getPosts(),
        builder: (_, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(
              child: Text(
                'Loading...',
              ),
            );
          } else if (snapshot.connectionState == ConnectionState.active) {
            return ListView.builder(
              itemCount: 2,
              itemBuilder: (_, index) {
                return ListTile(
                  title: Text(
                    snapshot.data[index].data['name'],
                  ),
                );
              },
            );
          } else {
            return Container();
          }
        },
      ),
    );
  }
}

这些是我的应用程序的依赖项,

dependencies:
  flutter:
    sdk: flutter
  url_launcher:
  cloud_firestore: ^2.3.0
  firebase_core: ^1.3.0
  firebase_analytics: ^5.0.2
  firebase_auth: ^2.0.0

由于 null 安全性,我也遇到了错误。所以我决定通过更改 pubspec.yaml 文件中的环境来禁用 null 安全性

environment:
  sdk: ">=2.11.0 <3.0.0"

在为页面编写代码时,我从这个 youtube 教程中获得了帮助:- https://www.youtube.com/watch?v=6uBjMFoyT-I

整天都在努力完成这项工作,因此非常感谢任何帮助。

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    FutureBuilder 未处于活动状态,但已完成

    更新您的状况

     else if (snapshot.connectionState == ConnectionState.done &&
                  snapshot.data != null) {
                return ListView.builder(
                  itemCount: snapshot.data!.length,
                  itemBuilder: (_, index) {
                    return ListTile(
                      title: Text(
                        snapshot.data![index].data['name'],
                      ),
                    );
                  },
                );
    
    

    【讨论】:

    • 在更新条件并在我的模拟器上打开应用程序后,我收到一个红屏并显示错误消息:“NoSuchMethodError: The method '[]' was called on null. \n Receiver: null \n 尝试调用:[](0)"
    • 对不起@samit。更新了我的答案。您可能遗漏了一些数据,您需要检查您是否有数据并将您的列表视图更新为实际长度
    • 我按照你说的做了,代码可以工作,但我在模拟器上看到一个空白屏幕,但我想要来自 Firestore 的数据。我的云 Firebase 有问题吗?
    • 您的 Firestore 结构是什么?您的通话路径正确吗?我会验证这一点
    【解决方案2】:

    尝试将Text 小部件中的代码更改为如下内容:

    Text(
               snapshot.data[index].data()['name'],
            ),
    

    从 DocumentSnapshot 访问数据时,必须使用 .data() 方法访问,不要忘记包含括号。

    【讨论】:

    • 但是为什么我看不到来自 firebase 的数据?运行应用程序时,我看到一个空白容器。
    • 尝试打印 snapshot.data[index].data() 并告诉我它返回了什么
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 2018-11-18
    • 2021-05-05
    • 2021-10-01
    • 2021-02-24
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多