Firebase 如何获取文档列表而不侦听FlatterCloudFireStore中的更改?
每当我在本地进行排序时,我的应用程序再次从firestore获取项目列表 因此,我将丢失已排序的列表并重新获取原始列表 本质上,我正在寻找一个.once()替代方案,就像我在firebase realtime db with JS中使用的那样Firebase 如何获取文档列表而不侦听FlatterCloudFireStore中的更改?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,每当我在本地进行排序时,我的应用程序再次从firestore获取项目列表 因此,我将丢失已排序的列表并重新获取原始列表 本质上,我正在寻找一个.once()替代方案,就像我在firebase realtime db with JS中使用的那样 fetchItemsFromDb().then((itemsFromDb) { setState(() { items = itemsFromDb; isProcessed = true; }); }
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;
}
fetchItemsFromDb()。然后((itemsFromDb){
设置状态(){
items=itemsFromDb;
isProcessed=true;
});
});
fetchItemsFromDb()异步{
列表项=[];
等待Firestore.instance.collection('items').getDocuments()。然后((数据){
items=data.documents.map((DocumentSnapshot项){
var i=项目数据;
退货项目(
i['itemName'],
int.parse(i['quantity']),
int.parse(i['price']),
i['veg'],
i['uid'],
i[“时间戳”],
纬度(i['location'].纬度,i['location'].经度),
);
}).toList();
});
退货项目;
}
FetchItemsFromDB()应该按照您期望的方式工作,可能是调用函数的代码:
fetchItemsFromDb().then((itemsFromDb) {
setState(() {
items = itemsFromDb;
isProcessed = true;
});
});
在您不期望的情况下再次运行。该代码是否存在于构建方法中?如果是这样,它将在小部件重建的任何时候运行,这取决于您如何进行本地排序。如果只需要运行一次,可以将其添加到小部件的initState()函数中。
getDocuments()
工作方式类似于once()
。它们都是一次获取数据,所以我不理解这里的问题。嘿,道格,奇怪的是,我通过firestore web控制台所做的任何更改都反映在我的列表视图中。我相信这一次不是一个理想的行为。这也不是getDocuments()的行为。还有别的问题。你必须调试你的应用程序,找出是什么在反复调用fetchItemsFromDb,如果这是你唯一可以查询的代码。我完全明白,这是否与文档被映射到items直接由set state函数列出这一事实有关,其中items是一个状态,并且源代码中的任何更改都与状态同步。