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
相关产品推荐
相关产品推荐

