Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 无法访问列表视图的firestore数据库文档,异步querySnapshot也存在错误_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase 无法访问列表视图的firestore数据库文档,异步querySnapshot也存在错误

Firebase 无法访问列表视图的firestore数据库文档,异步querySnapshot也存在错误,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有一个手动创建的firestore数据库,它有一个名为countries的集合,然后它下面有几个文档。现在我试图从那里检索数据,并在列表视图中用分幅显示数据,但它给出了有关querysnapshot和错误状态的错误:无法在DocumentSnapshot平台上获取不可用的字段存在,我该怎么办 代码运行良好,但我只能从一个文档中访问信息 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart';

我有一个手动创建的firestore数据库,它有一个名为countries的集合,然后它下面有几个文档。现在我试图从那里检索数据,并在列表视图中用分幅显示数据,但它给出了有关querysnapshot和错误状态的错误:无法在DocumentSnapshot平台上获取不可用的字段存在,我该怎么办

代码运行良好,但我只能从一个文档中访问信息

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';

class test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: StreamBuilder(
      stream: FirebaseFirestore.instance
          .collection('countries')
          .doc('nW9L4LGpn2MZVyiTyUII')
          .snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) return Text('Loading data.. please wait..');
        return ListView.builder(itemBuilder: (context, index) {
          return ListTile(
            title: Text(snapshot.data['name']),
            subtitle: Text(snapshot.data['cuisine']),
          );
        });
      },
    ));
  }
}

现在,当我尝试访问不同的文档时

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';

class test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
        stream: FirebaseFirestore.instance
            .collection('countries')
            // .doc('nW9L4LGpn2MZVyiTyUII')
            .snapshots(),
        builder: (context, AsyncSnapshot<QuerySnapshot> querySnapshot) {
          if (querySnapshot.hasError) return Text('has some error');
          if (querySnapshot.connectionState == ConnectionState.waiting) {
            return CircularProgressIndicator();
          } else {
            // if (!snapshot.hasData) return Text('Loading data.. please wait..');
            final list = querySnapshot.data;
            return ListView.builder(
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(list[index]['name']),
                  subtitle: Text(list[index]['cuisine']),
                );
              },
              itemCount: list.length,
            );
          }
        },
      ),
    );
  }
}

以及它在这之后抛出的错误

error: The getter 'length' isn't defined for the type 'QuerySnapshot'. (undefined_getter at [vola1] lib\test.dart:30)

我最近开始使用firebase firestore。我不确定如何处理这些错误。

错误在
生成器的回调定义中:

builder:(上下文、快照、异步快照查询快照){
...
}
StreamBuilder的
builder
的定义是一个包含两个参数的函数:

  • 构建上下文和

  • 快照

  • 因此,您应该将
    builder
    更改为以下代码:

    builder:(上下文,异步快照查询快照){
    ...
    }
    
    错误消息中也说明了这一点:

     The argument type 'Widget Function(BuildContext, AsyncSnapshot<dynamic>, AsyncSnapshot<QuerySnapshot>)' can't be assigned to the parameter type 'Widget Function(BuildContext, AsyncSnapshot<QuerySnapshot>)'.
    

    更改
    final list=snapshot.data
    最终列表=snapshot.data.data()
    ,以及在项目生成器中具有快照.data的其他位置,不要忘记指定itemCount:List.length,我现在更新了代码,但是仍然有这些错误。我按照你的建议编辑了代码,它仍然抛出这些错误。我也编辑了上面提到的问题中的代码。我现在更新了答案,请你核对一下好吗。此行:
    final list=querySnapshot.data.docs应该删除错误。是的,它工作了。谢谢你的帮助。太好了!很乐意帮忙。
    
     The argument type 'Widget Function(BuildContext, AsyncSnapshot<dynamic>, AsyncSnapshot<QuerySnapshot>)' can't be assigned to the parameter type 'Widget Function(BuildContext, AsyncSnapshot<QuerySnapshot>)'.
    
    final list = querySnapshot.data.docs;