firebase - 在 null 上调用了 getter 'document'。溪流文件没有被退回
问题描述
已定义Stream<QuerySnapshot>
,我正在从类构造函数中调用 uid
Stream<QuerySnapshot> get hotels {
// print("$uid in stream");
return ownerCollection.document(uid).collection("hotels").snapshots();
}
设置StreamProvider
class Hotels extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return StreamProvider<QuerySnapshot>.value(
value: DatabaseService(uid: user.uid).hotels,
child: Scaffold(
appBar: AppBar(
backgroundColor: Colors.orangeAccent,
title: Text("My Hotels"),
),
body: HotelList())
);
这是我正在访问的屏幕Stream<QuerySnapshot>
class HotelList extends StatefulWidget {
@override
_HotelListState createState() => _HotelListState();
}
class _HotelListState extends State<HotelList> {
@override
Widget build(BuildContext context) {
final hotels = Provider.of<QuerySnapshot>(context);
for(var doc in hotels.documents) {
print(doc.data);
}
return Container();
}
}
当我运行它时,它给了我错误:The getter 'documents' was called on null , Reciever : null
请帮忙,我想打印子集合“酒店”中的所有文件。
解决方案
正如我在评论中所说,错误消息“X was called on null”意味着 X 不是 null,而是你调用它的任何内容。在您的情况下,这是问题代码:
final hotels = Provider.of<QuerySnapshot>(context);
for(var doc in hotels.documents) {
print(doc.data);
}
错误是documents
在 null 上调用,这意味着hotel
为 null。这意味着您的提供程序获取无法正常工作。
我没有使用StreamProvider
太多,但如果我不得不猜测这是因为第一次构建您的小部件时,源流尚未发布任何数据,这是有道理的,因为流的源是需要的在线服务是时候连接和收集数据了。这意味着没有QuerySnapshot
返回,因此Provider.of
返回 null。
通常你会通过给出StreamProvider
一个初始值来解决这个问题。但是,由于类型是QuerySnapshot
,我不确定除了 null 之外的有意义的初始值是什么。在这种情况下,您唯一真正的选择是只处理hotel
null 的情况。
final hotels = Provider.of<QuerySnapshot>(context);
if (hotels == null) {
print('There is no data yet.');
return Container();
}
...
推荐阅读
- c# - 具有多个不同类型参数的 Dapper 更新查询
- python - 我正在尝试使用 python 从 aws 下载整个 s3 存储桶,但得到一个 OSError[error22]
- angular - 内容安全政策指令
- javascript - 服务人员什么时候应该自毁?
- reactjs - 有条件地将 prop 传递给 React 中的组件
- r - 无法在 R 中创建印度等值线
- java - 自定义订购 MSSQL 休眠 Spring Boot 2
- google-bigquery - BigQuery Avro 加载作业与 useAvroLogicalTypes 不正确的字段类型
- ios - SwiftUI:向控件添加效果会禁用交互性
- c# - 绑定:未找到属性。MVVM