Dart自定义Model类向列表添加数据时出现类型转换错误
解决
type 'int' is not a subtype of type 'String'错误 错误根源
你代码里的double.parse(value['molWeight'])试图解析一个整数类型的值,但double.parse()要求参数必须是字符串——而Firebase返回的molWeight大概率是整数类型(比如18),直接传入自然会触发类型不匹配错误。
修复方案
不需要用字符串解析,直接将num类型(int和double的父类)转为double即可,同时加上空值处理避免崩溃:
修改getLoadedData()里的molWeight赋值逻辑:
molWeight: ((value['molWeight'] ?? 0.0) as num).toDouble(),
完整修复后的代码片段
_tempChemList.forEach((elementId, value) { _tempChemical.add( ChemModel( id: elementId, // 建议用Firebase返回的元素ID作为唯一标识,而非空格 name: value['name'] ?? "Empty", formula: value['formula'] ?? "Empty", description: value['description'] ?? "", molWeight: ((value['molWeight'] ?? 0.0) as num).toDouble(), ), ); });
额外优化建议
- Model类无需混入
ChangeNotifier,它只是数据载体,状态管理逻辑应该放在对应的ViewModel类中:
class ChemModel { String id; String name; String formula; double molWeight; String description; ChemModel({ required this.id, required this.name, required this.formula, this.description = "", this.molWeight = 0.0, // 用0.0更符合double类型的默认值 }); }
内容的提问来源于stack exchange,提问作者ishan
相关产品推荐
相关产品推荐

