Flutter中如何计算Map排除Month键外所有值的总和
Flutter遍历Map排除指定键求和实现方法
核心修改逻辑:
- 替换原有硬编码累加单个
Provisional字段的逻辑,遍历每个月份对应Map的全部键值对,跳过键为Month的条目,将剩余所有int类型的支出值累加即可 - 修正示例数据里
0250的写法:Dart中整数前加前导0会被识别为八进制数值,0250实际解析值为168,和预期的250不符,直接写十进制250即可 - 原代码里对int值做
toString()再int.parse()属于多余操作,Map里存的本身就是int类型,直接取值累加即可
修改后的完整可运行代码:
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { MyApp({super.key}); final List<Map<String, int>> mylist = [ { 'Month': 1, 'Provisional': 4500, 'Teaexp': 980, 'Lightbill': 1240, 'Assets': 399, }, { 'Month': 2, 'Provisional': 250, 'Teaexp': 150, 'Lightbill': 240, 'Assets': 30, } ]; @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: SafeArea( child: Column( children: List.generate(mylist.length, (index) { int sum = 0; // 遍历当前月份所有收支项 mylist[index].forEach((key, value) { // 排除月份字段,其余值累加 if (key != 'Month') { sum += value; } }); return ListTile( leading: CircleAvatar( child: Text(mylist[index]['Month'].toString()), ), title: Text(sum.toString()), ); }), ), ), ), ); } }
实现效果说明:
- 1月总支出计算结果:4500+980+1240+399 = 7119
- 2月总支出计算结果:250+150+240+30 = 670
- 后续如果新增其他支出字段(比如餐饮、交通类的键值对),不需要修改求和逻辑,会自动纳入总金额计算,和你给出的单月示例
{'Month':1,'Lightbill':305,'Provisional':503}计算得到总支出808的逻辑完全一致。
内容的提问来源于stack exchange,提问作者Irfan Ganatra
相关产品推荐
相关产品推荐

