首页 > 解决方案 > 如何正确更新活动流的 Firestore 查询快照?

问题描述

我有一个颤动的应用程序,它根据不同的标准(如城市、国家、地区等)在 Firestore 数据库中搜索人。该应用程序具有作为用户输入的标准,然后单击按钮即可选择该标准。单击按钮时,将调用以下函数:

CollectionReference collectionReference = Firestore.instance.collection("profiles");
void getResults() {
// getQuery is a function that adds 'where' statements
// (e.g., .where("city", isEqualTo: "Paris);
Query query = getQuery(collectionReference, filters); 

Stream<QuerySnapshot> snapshots = query.snapshots();

snapshots.map((docs) => docs.documents).listen((onData){
   myStreamController.add(onData);
   }
}

使用上面的代码,即使现有流包含所有需要的数据,也会创建一个新查询。例如,用户首先检索所有来自法国的人,然后仅通过更新过滤器来检索所有来自巴黎的人。

由于现有流已经拥有来自巴黎的所有人,是否可以在不创建新流/查询的情况下动态更新查询?

我在这里想要实现的是我希望 Firestore 利用缓存而不是再次检索所有文档。

标签: firebasefluttergoogle-cloud-firestore

解决方案


Firestore 不支持动态更改活动查询的参数。如果要更改活动查询的过滤器或排序,则必须停止第一个查询,创建一个新的 Query 对象,然后执行新查询。


推荐阅读