gpt4 book ai didi

firebase - Flutter Firestore 缓存流

转载 作者:行者123 更新时间:2023-12-03 02:52:53 25 4
gpt4 key购买 nike

我有一个 flutter 聊天,当用户到达列表末尾时显示最新消息。

这是通过在 firestore 上设置一个监听器来完成的,限制为 10 条消息(限制(10)),当我到达消息列表的末尾时,我将流的限制增加 10。

// LISTENER QUERY MESSAGES

limitdocuments = 10;

StreamBuilder(
stream: Firestore.instance
.collection('groups')
.document(groupId)
.collection("messages")
.orderBy('sentTime', descending: true)
.limit(limitdocuments)
.snapshots(),
builder: (context, snapshot) {

if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(valueColor: AlwaysStoppedAnimation<Color>(themeColor)));
} else {

return ListView.builder(
itemBuilder: (context, index) {
buildItem(index, snapshot.data.documents[index],true)
},
itemCount: snapshot.data.documents.length,
reverse: true,
controller: listScrollController,
);

}
},
),

// END OF THE LIST, INCREASE THE LIMIT BY 10

if(listScrollController.position.atEdge){
if(listScrollController.position.pixels == 0){
setState(() {
limitdocuments= limitdocuments+ 10;
});
}
}

我的问题是,firestore 是从数据库中重新下载所有消息(包括旧消息)还是从缓存中获取旧消息?

谢谢

最佳答案

首先

  • 确保在 initState() 中调用您的流以便您确定它只是在小部件实例化时调用。否则,它将始终尝试创建新的流集。

  • 接下来是测试

    尝试手动打印日志以查看您期望的行为是否正确。
    for (int i = 0; i < snapshot.data.documents.length; i++) {
    DocumentSnapshot doc = snapshot.data.documents.elementAt(i);

    // Check manually if the data you're referring to is coming from the cache.
    print(doc.metadata.isFromCache ? "Cached" : "Not Cached");
    }

    最后,是的——它应该被缓存。

    来自 Firebase documentation :

    Cloud Firestore supports offline data persistence. This feature caches a copy of the Cloud Firestore data that your app is actively using, so your app can access the data when the device is offline. You can write, read, listen to, and query the cached data. When the device comes back online, Cloud Firestore synchronizes any local changes made by your app to the Cloud Firestore backend.



    据我所知,Flutter Firestore 或实时数据库插件应该遵循与原生和 Web 对应 SDK 相同的架构和行为。

    关于firebase - Flutter Firestore 缓存流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59068459/

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