gpt4 book ai didi

firebase - 如何刷新 Firebase streambuilder 并减少文档读取次数

转载 作者:行者123 更新时间:2023-12-03 23:04:26 26 4
gpt4 key购买 nike

我正在努力与 Flutter 建立聊天,我计划使用 firestore。我有一个流构建器,我将读取的文档数量限制为 20。聊天工作正常并显示最后 20 条消息。现在,我想在滚动到顶部后立即添加接下来的 20 条旧消息。
我有一个可行的解决方案,但我不确定它是最好的解决方案。我最担心的是每次更改限制值时我正在执行多少次读取。我是在阅读 20 篇新文章还是阅读了 40 篇新文档?如果我滚动更多,我是否使用了 60 次读取?
见下面我的代码

void initState() {
maxMessageToDisplay = 20;
_scrollController = ScrollController();
_scrollController.addListener(() {
if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent) {
setState(() {
maxMessageToDisplay += 20;
});
}
});
super.initState();
}

Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('chat').limit(maxMessageToDisplay).orderBy('timestamp', descending: true).snapshots(),
builder: (context, snapshot) {

final messages = snapshot.data.documents;

messages.sort((a, b) => b.data['timestamp'].compareTo(a.data['timestamp']));
var format = new DateFormat("Hm");

List<MessageBubble> messageBubbles = [];
for (var message in messages) {
final messageText = message.data['text'];
final messageSender = message.data['sender'];
final messagePhoto = message.data['photo'];
final messageUserId = message.data['uid'];

final messageTime = format.format(DateTime.fromMillisecondsSinceEpoch(message.data['timestamp'], isUtc: false));

final messageBubble = MessageBubble(
sender: messageSender,
text: messageText,
photo: messagePhoto,
time: messageTime,
userId: messageUserId,
);
messageBubbles.add(messageBubble);
}
return Expanded(
child: ListView(
controller: _scrollController,
reverse: true,
padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 10.0),
children: messageBubbles,
),
);
},
);
}
}

最佳答案

如果监听器在 30 分钟内没有断开连接,则不必担心,因为 Firebase 仅在文档​​更改时计算新读取。
因此,在您的情况下,如果您阅读了 20 个文档,然后用户滚动并获得 20 个,您将只有 40 个而不是 60 个阅读。
您可以阅读有关 Firebase 计费的更多信息 here

关于firebase - 如何刷新 Firebase streambuilder 并减少文档读取次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63509021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com