You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中统计Firestore指定字段值的文档数量并展示

解决Flutter + Firestore统计COVID文档数量并展示的问题

高效获取COVID文档统计数

别遍历所有文档浪费资源,直接用Firestore的查询+统计API:

// 定义获取统计数的异步方法
Future<int> fetchCovidCaseCount() async {
  final countSnapshot = await FirebaseFirestore.instance
      .collection('Result')
      .where('result', isEqualTo: 'COVID')
      .count()
      .get();
  return countSnapshot.count;
}

点击按钮后在界面展示统计数

用StatefulWidget维护统计数状态,点击按钮后更新:

  1. 先在State类里声明状态变量:
int? _covidCaseCount;
  1. 给"Generate Report"按钮绑定回调:
ElevatedButton(
  onPressed: () async {
    // 调用统计方法并更新状态
    final count = await fetchCovidCaseCount();
    setState(() {
      _covidCaseCount = count;
    });
  },
  child: const Text('Generate Report'),
)
  1. 在界面中添加统计数展示区域:
// 放在你想要展示的位置,比如列表上方
Padding(
  padding: const EdgeInsets.all(16.0),
  child: _covidCaseCount != null
      ? Text('COVID阳性检测数: $_covidCaseCount', style: TextStyle(fontSize: 18))
      : Text('点击按钮生成报告'),
)

可选:实时监听统计数(自动更新)

如果需要数据变化时自动刷新统计数,用Stream替代Future:

Stream<int> getCovidCaseStream() {
  return FirebaseFirestore.instance
      .collection('Result')
      .where('result', isEqualTo: 'COVID')
      .snapshots()
      .map((querySnapshot) => querySnapshot.size);
}

然后用StreamBuilder展示实时数据:

StreamBuilder<int>(
  stream: getCovidCaseStream(),
  builder: (context, snapshot) {
    switch (snapshot.connectionState) {
      case ConnectionState.waiting:
        return const CircularProgressIndicator();
      case ConnectionState.active:
        if (snapshot.hasData) {
          return Text('实时COVID检测数: ${snapshot.data}', style: TextStyle(fontSize: 18));
        }
        return const Text('暂无数据');
      default:
        return const Text('加载异常');
    }
  },
)

整合现有列表展示

你原来的StreamBuilder用来展示结果列表,可以把统计数组件放在列表的上方或者AppBar下方,两者互不影响,完美整合到现有界面中。

内容的提问来源于stack exchange,提问作者ZAbbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:50:47