Flutter调用API遇类型转换错误:int无法转为double,无法渲染商品容器
解决Flutter JSON解析时int转double的类型异常
问题原因
从错误栈能明确看到,异常出现在Rating.fromJson方法的第52行——API返回的评分字段(比如rate)是int类型,但你的模型类里把该字段定义成了double类型,Dart的严格类型检查不允许直接将int赋值给double,因此抛出type 'int' is not a subtype of type 'double'异常。
解决方案
1. 修改Rating模型的JSON解析逻辑
找到package:flutter_fake_api/model/model.dart文件的第52行,把原本直接强制转成double的代码,改成先转成num类型再调用toDouble()方法,这样不管API返回的是int还是double,都能正确转为double类型。
修改前代码:
Rating.fromJson(Map<String, dynamic> json) : rate = json['rate'] as double, count = json['count'] as int;
修改后代码:
Rating.fromJson(Map<String, dynamic> json) : rate = (json['rate'] as num).toDouble(), count = json['count'] as int;
2. 可选:增加空值容错处理
如果API可能返回null值,可以再加一层空值判断,避免空指针异常:
Rating.fromJson(Map<String, dynamic> json) : rate = (json['rate'] as num?)?.toDouble() ?? 0.0, count = json['count'] as int? ?? 0;
验证修改
改完之后重新调用ProductService.fetchProducts,就能正常解析API返回的数据,之后就可以把数据渲染到包含标题、图片、价格、分类、描述、评分的容器里了。
内容的提问来源于stack exchange,提问作者Priyanka Patel
相关产品推荐
相关产品推荐

