首页 > 解决方案 > Flutter firebase 在所有数据中添加一个类似的字段

问题描述

我有一个名为 span 的集合,其中包含一个字段“qty”。我想在数据中添加所有 qty 字段。我正在从 firebase 查询我的数据,如下所示

getsubtask() async {
    return Firestore.instance.collection('span').where('projectid',isEqualTo: widget.detailDocument.documentID).snapshots();
  }

所以我需要在我从上面列表中获得的数据中添加所有 qty 字段

int getTotals ;
  void getTotal() {
    for (int i = 0; i < getsubtask().length; i++)
      getTotals += getsubtask()[i]['qty'];
  }

我正在尝试获取 qty 字段的总数

  ListTile(
            title: Text(getTotals.toString()),
            leading: Text('qty'),
          ),

我在 listtile 中显示上述数据。

但它在运行时在标题中显示“null”。

标签: firebasefluttergoogle-cloud-firestore

解决方案


您的代码中有很多问题,主要是因为数据是异步加载的,您需要始终如一地处理它。我很快发现了一些问题:

  1. getsubtask()await是异步的,所以你在调用它时需要它的结果。
  2. 这意味着getTotal也需要async
  3. 这反过来意味着您不能像在渲染代码中那样调用它,但您需要使用 aStreamBuilder或将总数存储在状态中。
  void getTotal() async {
    var subtasks = await getsubtask();
    var totals = ;
    for (int i = 0; i < subtasks.length; i++)
      totals += subtasks[i]['qty'];
    }
    setState({ totals: totals });
  }

现在你可以调用getTotal()你的构造函数,或者几乎任何地方,开始计算总数,然后渲染总数:

  ListTile(
    title: Text(totals),
    leading: Text('qty'),
  ),

推荐阅读