首页 > 解决方案 > 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");
  }

如果您还可以向我提供一些关于StreamBuilderStream一般的信息,我会很乐意倾听,但显然这是一个加分项。

标签: firebasefluttergoogle-cloud-firestorestream-builder

解决方案


解决了,问题是流,我没有返回正确的,但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();
  }

推荐阅读