查询无法在运行时更改条件的 Firestore



我正在开发我的Flutter应用程序,我正在使用Firebase作为后端。我也使用firestore作为我的数据库。

我有这个问题,我想根据用户的选择过滤掉一些项目。我在数据服务中定义了变量filteredCategory,并在此处创建了 setter。

void setFilteredCategory(String category) {
filteredCategory = category;
}

然后我从过滤器小部件调用了这个二传手

DataService().setFilteredCategory(category);

但是where()方法没有任何变化。它只是忽略了这一变化。

Stream<dynamic> get getItems {
return items
.document(uid)
.collection("items")
.where("category", isEqualTo: filteredCategory)
.snapshots()
.map(_snapshotToUserData);
}

我也尝试使用sleep()方法设置这个变量一段时间,这种方法奏效了,所以我不知道,这里出了什么问题。你有什么建议吗?

谢谢。

您的流查询可能没有更改,因为它只是作为小组件的一部分呈现。除非使用 setState 来确保使用新值重新生成查询,否则它不会更改。试试这个:

void setFilteredCategory(String category) {
setState((){
filteredCategory = category;
});
}

如果这没有您期望的结果,则可以将查询从 Widget 部分完全移动并将其传递给状态本身。

为了更新 StreamBuilder 正在使用的流,您应该将DataService().setFilteredCategory(category);放入setState调用中

setState((){
DataService().setFilteredCategory(category);
});

每次尝试创建一个新的items实例,如下所示:

Stream<dynamic> get getItems {
return Firestore.instance.collection("foo").document(uid).collection("items")
.where("category", isEqualTo: filteredCategory)
.snapshots()
.map(_snapshotToUserData);

最新更新