StreamBuilder 快照没有数据 Flutter
StreamBuilder snapshot has no data 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
的一般信息,我会很乐意倾听,但显然这是一个加号。
您需要从您的流中创建 ChatCard
个对象,假设您希望它们在列表中,因为您正在获取 docs
和 return 个对象的列表。
Stream<List<ChatCard>> streamChats(MyUser sender) {
List<ChatCard> chatCardList=[];
if (sender != null) {
if (sender.id != null) {
try {
return await FirebaseFirestore.instance
.collection("${sender.id}/chats'")
.snapshots().then((snap){
for(var item in snap.data.docs){
chatCardList.add(ChatCard.fromMap(snap.data));}
return chatCardList; });
print(
"${sender.id}/chats'");
} on FirebaseException catch (e) {
print(e);
} catch (e) {
print(e);
}
} else
print("Sender ID null");
} else
print("Sender null");
}
已解决,问题出在流上,我没有返回正确的流,但是 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();
}
我查看了一些类似的问题,但没有找到我要找的内容。
我有一个 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
的一般信息,我会很乐意倾听,但显然这是一个加号。
您需要从您的流中创建 ChatCard
个对象,假设您希望它们在列表中,因为您正在获取 docs
和 return 个对象的列表。
Stream<List<ChatCard>> streamChats(MyUser sender) {
List<ChatCard> chatCardList=[];
if (sender != null) {
if (sender.id != null) {
try {
return await FirebaseFirestore.instance
.collection("${sender.id}/chats'")
.snapshots().then((snap){
for(var item in snap.data.docs){
chatCardList.add(ChatCard.fromMap(snap.data));}
return chatCardList; });
print(
"${sender.id}/chats'");
} on FirebaseException catch (e) {
print(e);
} catch (e) {
print(e);
}
} else
print("Sender ID null");
} else
print("Sender null");
}
已解决,问题出在流上,我没有返回正确的流,但是 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();
}