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

Dart报错type 'int' is not a subtype of type 'double'如何解决

Dart 运行报错:type 'int' is not a subtype of type 'double' 解决方法

错误根因

这是Dart强类型校验抛出的类型不匹配错误:接口返回的JSON数据中某数值字段实际为int类型,但你定义的Product类中对应接收属性声明为double类型,直接赋值时类型无法兼容就会触发该异常。

结合你贴的代码,出错位置基本锁定在price和discount两个字段:后端返回价格、折扣这类数值时,无小数的场景通常会直接返回int类型整数(例如100元返回100而非100.0),直接赋值给double类型的类属性就会报错。

修复代码

对可能出现int/double混用的数值字段做显式类型转换,先统一转为num(int和double的公共父类型),再转成目标类型即可兼容两种返回格式,修改后代码如下:

_getAllHotProducts() async {
    var hotProducts = await _productService.getHotProducts();
    var result = json.decode(hotProducts.body);
    result['data'].forEach((data) {
      var model = Product();
      model.id = data['id'];
      model.name = data['name'];
      model.photo = data['photo'];
      // 兼容接口返回int/double两种数值类型
      model.price = (data['price'] as num).toDouble();
      model.discount = (data['discount'] as num).toDouble();

      setState(() {
        _productList.add(model);
      });
    });
  }

后续排查建议

  • 先核对Product类的字段声明:如果id字段实际为整数值,不要声明为double类型,避免出现反向类型不匹配
  • 所有接口返回的数值类字段,只要存在int、double混用可能,都建议先转成num类型后再调用toInt()/toDouble()转换为目标类型,不要直接赋值JSON原始返回值
  • 如果项目使用json_serializable等自动序列化工具,可以配置自定义数值类型转换器,全局自动兼容int/double类型,无需每个字段手动处理

内容的提问来源于stack exchange,提问作者Md Saiful Islam 192-15-13285

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:12:31