【发布时间】:2020-07-10 02:34:37
【问题描述】:
每当我在本地进行排序时,我的应用程序都会再次从 firestore 获取项目列表。
因此,我丢失了已排序的列表并重新获得了原始列表。
基本上,我正在寻找一个 .once() 替代方案,就像我在带有 JS 的 firebase realtime db 中使用的那样。
fetchItemsFromDb().then((itemsFromDb) {
setState(() {
items = itemsFromDb;
isProcessed = true;
});
});
fetchItemsFromDb() async {
List<Item> items = [];
await Firestore.instance.collection('items').getDocuments().then((data) {
items = data.documents.map((DocumentSnapshot item) {
var i = item.data;
return Item(
i['itemName'],
int.parse(i['quantity']),
int.parse(i['price']),
i['veg'],
i['uid'],
i['timestamp'],
LatLng(i['location'].latitude, i['location'].longitude),
);
}).toList();
});
return items;
}
【问题讨论】:
-
getDocuments()的作用类似于once()。他们都一次获取数据,所以我不明白这里的问题。 -
嘿,Doug,奇怪的是,我通过 Firestore Web 控制台所做的任何更改都反映在我的列表视图中。我相信这不是一次想要的行为。
-
这也不是 getDocuments() 的行为。还有什么不对劲的。如果这是您查询的唯一代码,您必须调试您的应用程序并找出重复调用 fetchItemsFromDb 的内容。
-
我完全明白了,这是否与文档通过设置状态函数直接映射到项目列表的事实有关,其中项目是一种状态,来源的任何变化都与状态同步。
标签: firebase flutter dart google-cloud-firestore