gpt4 book ai didi

firebase - getter 'document'在null上被调用。 Stream 文档未返回

转载 作者:行者123 更新时间:2023-12-03 04:14:16 25 4
gpt4 key购买 nike

定义的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被调用为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();
}

...

关于firebase - getter 'document'在null上被调用。 Stream <QuerySnapshots>文档未返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61587243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com