Firebase StreamBuilder快照没有数据抖动

Firebase StreamBuilder快照没有数据抖动,firebase,flutter,google-cloud-firestore,stream-builder,Firebase,Flutter,Google Cloud Firestore,Stream Builder,我看了一些类似的问题,但没有找到我想要的。 我有一个StreamBuilder,它的快照没有数据,但是如果我查看它正在侦听的集合,我可以看到有两个文档 这是我第一次使用StreamBuilder,所以我可能缺少一些基本规则。 我说它没有数据,因为它总是显示“这里没有聊天” 这是代码(稍后是流函数): 如果您还可以向我提供一些关于StreamBuilder和Stream的信息,我很乐意听您介绍,但显然这是一个优点。您需要从流中创建ChatCard对象,假设您希望将它们列在列表中,因为您将获得一个文

我看了一些类似的问题,但没有找到我想要的。 我有一个
StreamBuilder
,它的快照没有数据,但是如果我查看它正在侦听的集合,我可以看到有两个文档

这是我第一次使用
StreamBuilder
,所以我可能缺少一些基本规则。 我说它
没有数据
,因为它总是显示
“这里没有聊天”

这是代码(稍后是流函数):


如果您还可以向我提供一些关于
StreamBuilder
Stream
的信息,我很乐意听您介绍,但显然这是一个优点。

您需要从流中创建
ChatCard
对象,假设您希望将它们列在列表中,因为您将获得一个
文档的列表,然后把它们还给我

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");
  }
流媒体聊天(MyUser sender){
列表chatCardList=[];
if(发送方!=null){
if(sender.id!=null){
试一试{
return wait wait FirebaseFirestore.instance
.collection(${sender.id}/chats'))
.snapshots()。然后((捕捉){
for(snap.data.docs中的var项){
添加(ChatCard.fromMap(snap.data));}
返回chatCardList;});
印刷品(
“${sender.id}/chats'”;
}关于FirebaseException捕获(e){
印刷品(e);
}捕获(e){
印刷品(e);
}
}否则
打印(“发件人ID为空”);
}否则
打印(“发件人空”);
}

解决了,问题是流,我没有返回正确的流,但使用
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();
  }
流媒体聊天(用户发件人){
返回FirebaseFirestore.instance
.收集(“ID”)
.doc(“选项卡”)
.collection(sender.id[0].toLowerCase())
.doc(发件人.id[0].toLowerCase())
.收藏(“聊天”)
.快照();
}

如果调用
打印(快照),您会看到什么
if(snapshot.hasData){
FirebaseFirestore.instance.collection(${sender.id}/chats')之前
是否假设这就是构造对
chats
子集合的collectionReference的方式?@pskink我看到了:flatter:AsyncSnapshot(ConnectionState.none,null,null)
ConnectionState.none
以及其他内容?如果是这样,则
widget.database.streamChats(widget.user)
不会发出任何data@pskink不,只有我以前写的,没有和一些空字段,我稍后会这样做,但正如上面pskink所说的,我的流不会发出任何数据…也许这是主要问题
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");
  }
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();
  }