Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何获取文档列表而不侦听FlatterCloudFireStore中的更改?_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase 如何获取文档列表而不侦听FlatterCloudFireStore中的更改?

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; }); }

每当我在本地进行排序时,我的应用程序再次从firestore获取项目列表

因此,我将丢失已排序的列表并重新获取原始列表

本质上,我正在寻找一个.once()替代方案,就像我在firebase realtime db with JS中使用的那样

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是一个状态,并且源代码中的任何更改都与状态同步。