Flutter Dart报错:类型'Transaction'未定义运算符'[]' 金额求和如何解决?
报错原因
你的代码里有两处语法错误共同触发了该报错:
- 错误使用类名
Transaction访问列表元素:你的交易存储在实例变量_userTransactions列表中,需要通过_userTransactions[下标]的方式获取对应位置的Transaction实例,直接写Transaction[qindex]是把类本身当成了列表使用,属于语法错误。 - 把类实例当成Map访问属性:
Transaction是你自定义的实体类,不是Map结构,Dart中自定义类的属性需要用.运算符访问,使用['amount']访问会被识别为调用类的[]运算符,而你没有给Transaction类定义该运算符,所以触发报错。
另外你当前的逻辑也没有实现全列表遍历求和的需求,仅每次调用函数累加一个元素的金额,还会存在下标越界的风险。
修复方案
方案1:修复原有逐次累加逻辑
只需要修改错误的取值行,同时增加越界判断即可:
void _sum_all_transactions() { setState(() { qindex = qindex + 1; }); // 增加越界判断,避免下标超过列表长度报错 if (qindex < _userTransactions.length) { // 改为从列表取实例,用.访问amount属性 totalamount += _userTransactions[qindex].amount; } }
方案2:一次性统计所有交易总金额(更推荐)
如果你不需要逐次累加,直接要所有交易的总金额,可以直接用列表的fold方法实现,不需要自己维护下标变量,代码更简洁不易出错:
void _sum_all_transactions() { setState(() { // 0是初始值,遍历所有元素累加amount得到总和 totalamount = _userTransactions.fold(0, (currentSum, transaction) => currentSum + transaction.amount); }); }
内容的提问来源于stack exchange,提问作者sadun alpdag
相关产品推荐
相关产品推荐

