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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:15:03