我查看了一些类似的问题,但没有找到我要找的内容。
我有一个 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
的一般信息,我会很乐意倾听,但显然这是一个加分项。
答案 0 :(得分:1)
已解决,问题出在流上,我没有返回正确的流,但使用 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();
}
答案 1 :(得分:0)
您需要从流中创建 <form class="emailsub" action="subscribe.php" method="POST">
<h1>Subscribe</h1>
<input type="text" name="" placeholder="Full Name">
<input type="text" name="" placeholder="Email Address">
<input type="submit" name="" value="Submit">
</form>
对象,假设您希望它们在列表中,因为您正在获取 ChatCard
的列表,然后返回它们。
docs