firebase - StreamBuilder 快照没有数据 Flutter
问题描述
我看了一些类似的问题,但没有找到我要找的东西。我有一个StreamBuilder
没有数据的快照,但是如果我查看它正在侦听的集合内部,我可以看到有 2 个文档。
这是我第一次使用StreamBuilder
,所以也许我错过了一些基本规则。我说它是has no data
因为它总是显示"No chats here"
。
这是代码(稍后的流函数):
StreamBuilder<ChatCard>(
stream: widget.database.streamChats(widget.user),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Container(
child: Text(
"There's something here!",
style: TextStyle(
color: Colors.white,
),
),
);
} else {
return Container(
child: Text(
"No chats here",
style: TextStyle(
color: Colors.white,
),
),
);
}
},
),
这是流函数,有一些额外的检查,因为我试图找出什么不起作用,顺便说一句,try
块中似乎没有错误,也没有if
违反语句:
Stream<ChatCard> streamChats(MyUser sender) {
if (sender != null) {
if (sender.id != null) {
try {
FirebaseFirestore.instance
.collection("ids/tabs/${sender[0].toLowerCase()}/${sender.toLowerCase()}/chats")
.snapshots();
print(
"ids/tabs/${sender[0].toLowerCase()}/${sender.toLowerCase()}/chats'");
} on FirebaseException catch (e) {
print(e);
} catch (e) {
print(e);
}
} else
print("Sender ID null");
} else
print("Sender null");
}
如果您还可以向我提供一些关于StreamBuilder
和Stream
一般的信息,我会很乐意倾听,但显然这是一个加分项。
解决方案
解决了,问题是流,我没有返回正确的,但QuerySnapshot
它可以工作:
Stream<QuerySnapshot> streamChats(User sender) {
return FirebaseFirestore.instance
.collection("ids")
.doc("tabs")
.collection(sender.id[0].toLowerCase())
.doc(sender.id[0].toLowerCase())
.collection("chats")
.snapshots();
}
推荐阅读
- java - 有哪些选项可以导出更改了速度和音高的音频文件?
- javascript - 如果数组包含具有特定 id 的对象,则返回 true
- c# - EntityFramework Core 是否支持实体的 Eager Loading?
- reactjs - React:高效的重新渲染表格
- python - Python 和指南针数据 - 算法?
- ios - 如何使用 iOS 的 WKWebView 的 callAsyncJavaScript 方法?
- servlets - 我可以调用 Servlet 而不在 web.xml 中映射它吗?
- javascript - 无法使用 require() 在 Reactjs 中导入图片
- maven - 在 Maven 中设置 dokka 的问题
- python - 如何使用内联 for 循环替换子字符串?