Flutter开发遇Set未定义/运算符等3个Dart类型报错如何解决
Flutter Chart组件3个报错修复方案
错误1:参数类型'Object?'无法分配给参数类型'num'
报错行:return sum + item['amount'];
修复:你定义的groupedTransactionValues是List<Map<String, Object>>类型,从Map中取出的值默认是Object?类型,需要显式强转为double:
return sum + (item['amount'] as double);
错误2:类型'Set'未定义运算符'/'
报错行:{data['amount'] as double} / totalSpending);
修复:你错误使用大括号包裹了类型转换代码,Dart中大括号包裹单个值会被识别为Set集合,自然没有除法运算符,改成小括号包裹即可:
(data['amount'] as double) / totalSpending
错误3:参数类型'Object?'无法分配给参数类型'double'
报错行:data['amount'];
修复:直接强转为double类型即可,不要用double.parse,double.parse仅支持字符串入参,你这里data['amount']本身存储的就是double类型,不需要转字符串再解析:
data['amount'] as double
完整修改后代码
import 'package:expense_app/Widget/chart_bar.dart'; import 'package:expense_app/models/transaction.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; class Chart extends StatelessWidget { final List<Transaction> recentTransactions; Chart(this.recentTransactions); List<Map<String, Object>> get groupedTransactionValues { return List.generate(7, (index) { final weekDay = DateTime.now().subtract( Duration(days: index), ); var totalSum = 0.0; for (var i = 0; i < recentTransactions.length; i++) { if (recentTransactions[i].date.day == weekDay.day && recentTransactions[i].date.month == weekDay.month && recentTransactions[i].date.year == weekDay.year) { totalSum += recentTransactions[i].amount; } } return { 'day': DateFormat.E().format(weekDay).substring(0, 1), 'amount': totalSum, }; }).reversed.toList(); } double get totalSpending { return groupedTransactionValues.fold(0.0, (sum, item) { // 修复错误1:添加显式类型转换 return sum + (item['amount'] as double); }); } @override Widget build(BuildContext context) { print(groupedTransactionValues); return Card( elevation: 6, margin: EdgeInsets.all(20), child: Container( padding: EdgeInsets.all(10), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: groupedTransactionValues.map((data) { return Flexible( fit: FlexFit.tight, child: Chartbar( data['day'].toString(), // 修复错误3:显式转double data['amount'] as double, totalSpending == 0.0 ? 0.0 // 修复错误2:替换大括号为小括号 : (data['amount'] as double) / totalSpending), ); }).toList(), ), ), ); } }
内容的提问来源于stack exchange,提问作者kavya bhargava
相关产品推荐
相关产品推荐

