【问题标题】:Flutter snapshot.data() always nullFlutter snapshot.data() 始终为空
【发布时间】:2021-02-26 18:48:14
【问题描述】:

我正在尝试在我的 Flutter Web 应用中显示来自 Firestore 的数据,但我没有得到任何数据。

基本上我只是调整了这个例子:https://firebase.flutter.dev/docs/firestore/usage#realtime-changes

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

class DataList extends StatefulWidget {
  @override
  _DataListState createState() => _DataListState();
}

class _DataListState extends State<DataList> {
  @override
  Widget build(BuildContext context) {
    CollectionReference collectionReference = FirebaseFirestore.instance.collection('data');

    return StreamBuilder<QuerySnapshot>(
      stream: collectionReference.snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        print('HasData: ${snapshot.hasData}');

        if (snapshot.hasError) {
          print(snapshot.error);
          return Text('Error: ${snapshot.error}');
        }

        if (snapshot.connectionState == ConnectionState.waiting) {
          return Text("Loading");
        }
        return new ListView(
           children: snapshot.data.docs.map((DocumentSnapshot document) {
              return new ListTile(
              title: new Text(document.data()['name']),
              subtitle: new Text(document.data()['description']),
              );
          }).toList(),
        );
      },
    );
  }
}

但 snapshot.hasData 始终为空,我收到此错误: [cloud_firestore/unknown] NoSuchMethodError: invalid member on null: 'includeMetadataChanges'

获取单个文档可以正常工作:

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

class GetData extends StatelessWidget {
  final String documentId;

  GetData(this.documentId);

  @override
  Widget build(BuildContext context) {
    CollectionReference collectionReference = FirebaseFirestore.instance.collection('data');

    return FutureBuilder<DocumentSnapshot>(
      future: collectionReference.doc(documentId).get(),
      builder:
          (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {

        if (snapshot.hasError) {
          return Text("Something went wrong");
        }

        if (snapshot.connectionState == ConnectionState.done) {
          Map<String, dynamic> data = snapshot.data.data();
          return Text("Name: ${data['name']}, Description: ${data['description']}");
        }

        return Text("loading");
      },
    );
  }
}

我做错了什么?

顺便说一句,我真的不需要它是实时的。

【问题讨论】:

  • 我遇到了同样的问题,完全相同的错误。可以读取文档但不能读取集合。最新的 Flutter beta (1.23.0-18.1.pre) 和 Cloud Firestore 包 (0.14.3)。
  • 另外我应该提一下,iOS 和 Android 工作正常,它只在 web 上运行时出现此错误。
  • 现在正在flutter fire问题页面上跟踪:github.com/FirebaseExtended/flutterfire/issues/4127
  • 1st - 在问题描述中有方法(hasData()),而在提供的代码中有字段snapshot.hasData;第二 - 提到的示例和 QuerySnapshot 的 API 参考都没有任何 hasData 属性/方法。你确定代码没问题?
  • @vitooh 你说得对,hasData 不是一种方法,我只是把它搞砸了。 hasData 属性是 AsyncSnapshot 的一部分。但这仍然不是真正的问题,因为根本不需要 print 语句。

标签: flutter google-cloud-firestore flutter-web


【解决方案1】:

尝试将 index.html 文件中的 firestore 脚本替换为:

<script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-firestore.js"></script>

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2020-07-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2020-09-19
    • 2021-10-08
    • 2021-07-24
    相关资源
    最近更新 更多