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

Flutter DataTable行内列求和问题求助

解决Flutter DataTable列数值求和而非字符串拼接的问题

问题出在你直接对字符串类型的字段执行+操作,这会触发字符串拼接而非数值求和。正确的做法是先将每个字段转换为数值类型,再进行求和计算。

修改步骤

  1. 单独将每个需要求和的字段转换为double类型(处理可能的空值,默认转为0)
  2. 计算对应字段的数值之和
  3. 将求和结果传入Format.convertTo进行格式化

修改后的代码

替换原代码中对应的rows生成逻辑,提前抽取转换逻辑让代码更清晰:

rows: List<DataRow>.generate(
  snapshot.data!.length,
  (index) {
    var data = snapshot.data![index];
    // 先将各列字符串转为数值,处理空值
    double val1 = double.tryParse(data.lapus1_n1) ?? 0.0;
    double val2 = double.tryParse(data.lapus2_n1) ?? 0.0;
    double val3 = double.tryParse(data.lapus3_n1) ?? 0.0;
    // 计算三列数值之和(如果只需要后两列,改为val2 + val3即可)
    double total = val1 + val2 + val3;
    
    return DataRow(
      color: MaterialStateColor.resolveWith((states) =>
          index % 2 == 1
              ? const Color.fromRGBO(34, 150, 243, 0.2)
              : const Color.fromARGB(0, 140, 233, 148)),
      cells: [
        DataCell(
          Text(
            Format.convertTo(val1, 0),
            style: const TextStyle(
              color: Color.fromARGB(255, 17, 17, 17),
              fontWeight: FontWeight.normal,
              fontSize: 12,
            ),
          ),
        ),
        DataCell(
          Text(
            Format.convertTo(val2, 0),
            style: const TextStyle(
              color: Color.fromARGB(255, 17, 17, 17),
              fontWeight: FontWeight.normal,
              fontSize: 12,
            ),
          ),
        ),
        DataCell(
          Text(
            Format.convertTo(val3, 0),
            style: const TextStyle(
              color: Color.fromARGB(255, 17, 17, 17),
              fontWeight: FontWeight.normal,
              fontSize: 12,
            ),
          ),
        ),
        DataCell(
          Text(
            Format.convertTo(total, 0),
            style: const TextStyle(
              color: Color.fromARGB(255, 17, 17, 17),
              fontWeight: FontWeight.normal,
              fontSize: 12,
            ),
          ),
        ),
      ],
    );
  },
).toList(),

关键说明

  • 用double.tryParse()配合?? 0.0确保字符串转数值时不会出现空值异常
  • 对数值类型执行+操作才能得到正确的求和结果,而非字符串拼接
  • 原代码中仅计算了后两列的和,上述代码按照需求改为三列之和,可根据实际需求调整求和逻辑

内容的提问来源于stack exchange,提问作者Ahmad Rifai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:57:43