我目前正在设计一个带有flutter的聊天应用程序,我正在使用Firestore来做这个。我想知道这些流是如何工作的,因为我想知道读取的次数,这样我就可以预测限制。假设目前有315条消息,并且所有消息都在聊天屏幕中。如果一个人输入了一条新消息,这将是第316条消息,因此flutter stream将读取所有316条消息,或者只是获取新添加的消息并将其附加到315个成员的列表中。
我看到很多视频阅读博客,他们就是忽略了这一点。我想清楚地理解这一点。
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,
),
);
}
},
);发布于 2020-06-25 13:04:07
当您从其中执行查询流时,它最初将读取所有匹配的文档。只要流处于活动状态,文档就会一直缓存在内存中。如果新文档与查询匹配,则只会读取新文档,其他所有内容都将从内存中重用。它不会再次读取所有以前缓存的文档。
发布于 2020-06-25 13:02:27
从Firestore Stream获取文档的方式将取决于您对可能是StreamBuilder小部件执行的查询。
如果您愿意,您可以通过添加时间戳参数,然后像这样查询快照,使聊天的新成员获得数据库中当前聊天可用的所有Firestore文档,或者只获取最新的文档:
Firebase.instance().collection("Chats").where("sentTimestamp",isGreaterThanOrEqualTo: new DateTime.now())您可以通过以下问题了解有关按日期获取和比较的更多信息:How to fetch records by comparing with date in flutter cloud firestore plugin?
https://stackoverflow.com/questions/62568089
复制相似问题