Flutter DataTable行内列求和问题求助
解决Flutter DataTable列数值求和而非字符串拼接的问题
问题出在你直接对字符串类型的字段执行+操作,这会触发字符串拼接而非数值求和。正确的做法是先将每个字段转换为数值类型,再进行求和计算。
修改步骤
- 单独将每个需要求和的字段转换为
double类型(处理可能的空值,默认转为0) - 计算对应字段的数值之和
- 将求和结果传入
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
相关产品推荐
相关产品推荐

