首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firestore Streams订阅

Firestore Streams订阅
EN

Stack Overflow用户
提问于 2020-06-25 12:52:23
回答 2查看 130关注 0票数 0

我目前正在设计一个带有flutter的聊天应用程序,我正在使用Firestore来做这个。我想知道这些流是如何工作的,因为我想知道读取的次数,这样我就可以预测限制。假设目前有315条消息,并且所有消息都在聊天屏幕中。如果一个人输入了一条新消息,这将是第316条消息,因此flutter stream将读取所有316条消息,或者只是获取新添加的消息并将其附加到315个成员的列表中。

我看到很多视频阅读博客,他们就是忽略了这一点。我想清楚地理解这一点。

代码语言:javascript
复制
return StreamBuilder<QuerySnapshot>(
      stream: _firestoreDatabase.collection(id).orderBy('time').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Center(
                child: CircularProgressIndicator(
                  backgroundColor: Colors.lightBlueAccent,
                ),
              ),
            ],
          );
        } else {
          final messages = snapshot.data.documents.reversed;
          List<MessageBubble> messageBubbles = [];
          for (var message in messages) {
            final messageText = message.data['amount'];
            final messageSender = message.data['team'];
            final timeDisp = message.data['timedisp'];
            final currentUser = teamName;

            bool isManager;
            if (messageSender.toString() == 'Manager') {
              isManager = true;
            } else {
              isManager = false;
            }

            final messageBubble = MessageBubble(
              sender: messageSender,
              text: messageText.toString(),
              isMe: currentUser == messageSender,
              timeDisp: timeDisp,
              isManager: isManager,
            );
            messageBubbles.add(messageBubble);
          }

    return Expanded(
            child: ListView(
              reverse: true,
              padding: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
              children: messageBubbles,
            ),
          );
        }
      },
    );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-25 13:04:07

当您从其中执行查询流时,它最初将读取所有匹配的文档。只要流处于活动状态,文档就会一直缓存在内存中。如果新文档与查询匹配,则只会读取新文档,其他所有内容都将从内存中重用。它不会再次读取所有以前缓存的文档。

票数 0
EN

Stack Overflow用户

发布于 2020-06-25 13:02:27

从Firestore Stream获取文档的方式将取决于您对可能是StreamBuilder小部件执行的查询。

如果您愿意,您可以通过添加时间戳参数,然后像这样查询快照,使聊天的新成员获得数据库中当前聊天可用的所有Firestore文档,或者只获取最新的文档:

代码语言:javascript
复制
Firebase.instance().collection("Chats").where("sentTimestamp",isGreaterThanOrEqualTo: new DateTime.now())

您可以通过以下问题了解有关按日期获取和比较的更多信息:How to fetch records by comparing with date in flutter cloud firestore plugin?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62568089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档