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