StreamBuilder 快照没有数据 Flutter

时间:2021-04-05 10:18:43

标签: firebase flutter google-cloud-firestore stream-builder

我查看了一些类似的问题,但没有找到我要找的内容。 我有一个 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 的一般信息,我会很乐意倾听,但显然这是一个加分项。

2 个答案:

答案 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