【问题标题】:How to get list of documents and not listen for changes in flutter cloud firestore?如何获取文档列表而不监听flutter cloud firestore的变化?
【发布时间】: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


【解决方案1】:

FetchItemsFromDB() 应该按照您的预期工作,可能是调用该函数的代码:

fetchItemsFromDb().then((itemsFromDb) {
      setState(() {
        items = itemsFromDb;
        isProcessed = true;
      });
});

在您不期望的时候再次运行。该代码是否存在于构建方法中?如果是这样,它将在它所在的小部件重建的任何时候运行,这取决于您如何进行本地排序可能会发生。如果您只需要它运行一次,可以将其添加到小部件的 initState() 函数中。

【讨论】:

    猜你喜欢
    • 2020-03-15
    • 2018-11-01
    • 1970-01-01
    • 2021-11-19
    • 2019-05-27
    • 2020-10-27
    • 2021-07-06
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多