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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:10:55