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

Flutter中如何对列表内相同月份的数值进行求和

实现按月份求和的方案

核心思路:把日期按「年-月」作为唯一标识分组,再对同组的Valor值累加即可得到对应月份的总和。

具体实现步骤

  • 在你筛选dataValues的循环结束位置,新增分组求和逻辑
  • 定义存储月度总和的Map,key为「年份-月份缩写」,value为对应月份的总和
  • 遍历所有符合条件的Data对象,拆分日期字符串得到月份标识,累加对应Valor值

修改后的完整代码示例

getData() async {
_database.child("Dados").onValue.listen((event) {
  dataValues.clear();
  temporaryDataValues.clear();
  finalDataValues.clear();
  // 新增:定义月度求和的Map
  Map<String, num> monthlySum = {};

  var keys = event.snapshot.value.keys;
  var values = event.snapshot.value;

  for (var key in keys) {
    Data data = new Data(
      values[key]["Valor"],
      values[key]["Date"],
      values[key]["IndicadorRef"],
    );

    if (data.indicadorRef == AreaScreen.indicadores[AreaScreen.indicadorIndex].name) {
      print(data.toJson().toString());
      dataValues.add(data);
      temporaryDataValues.add(data.valor);
      
      // 新增:处理月度累加逻辑
      List<String> dateParts = data.date.split('-');
      // 拼接得到年月唯一标识,比如2021-Aug
      String monthKey = "${dateParts[0]}-${dateParts[1]}";
      // 累加Valor,若Valor是字符串类型需要先转数值,替换为int.parse(data.valor)即可
      if(monthlySum.containsKey(monthKey)){
        monthlySum[monthKey] = monthlySum[monthKey]! + data.valor;
      } else {
        monthlySum[monthKey] = data.valor;
      }
    }
  }

  // 测试输出示例:你提供的样例中2021年8月总和为23+43=66
  print("2021年8月总和:${monthlySum["2021-Aug"]}");
  // 后续可直接使用monthlySum对象供界面渲染使用
});
}

注意事项

  • 如果需要统计所有年份同一个月的总和,直接把monthKey改成dateParts[1]即可,所有年份的8月都会累加到Aug这个key下
  • 你示例中的月份是葡萄牙语缩写(Abr对应4月、Mai对应5月、Set对应9月等),无需额外适配,代码会直接按原字符串正确分组
  • 若后续需要按升/降序输出各月份的总和,可直接对monthlySum的key排序后遍历取值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:24:04