快照在从服务器获取数据之前从缓存加载随机数据



我有一个加载产品的streambuilder
StreamBuilder<QuerySnapshot>(
stream: _ref.collection("products").where("category", isEqualTo: 
widget.selectedCategory.nameLabel).orderby("standing",descending:false).limit(10)

builder: (context, snapshot) {
if(snapshot.hasData){
if(snapshot.data!.docs.isNotEmpty) {
for (var changes in snapshot.data!.docChanges) {
//adding data to list<Products> products for pagination
}
}
return ProductsList.vertical(
scrollController: _scrollProducts,
products: products,
scroll: true,
);
}

问题是我收到的文件超过10份。如果有缓存数据,它会先加载缓存数据,然后再加载按'standing'排序的实际数据。


这个问题主要出现在第一次加载缓存数据不正确的时候。我们如何解决这个问题?

你所描述的听起来像是预期的行为。Firebase SDK for Firestore将:

  1. 立即给出本地缓存中满足查询条件的文档,
  2. 然后到达服务器获取最新的内容,然后更新其本地缓存。
  3. 最终在流上触发一个带有最新内容的额外事件。

我不认为有一种方法可以绕过在Flutter流上的第一个事件,您可以通过检查快照的document.metadata.isFromCache属性来检测快照来自缓存(并且可能不是与服务器最新的)。

最新更新