Flutter类型转换异常:_InternalLinkedHashMap无法转为int的原因问询
这个错误我之前在Flutter开发中也踩过坑,本质就是类型不匹配的问题——你的代码里某个地方把一个_InternalLinkedHashMap<String, dynamic>(也就是我们常说的JSON Map对象)当成int类型来强制转换了,系统当然会抛出类型不兼容的异常。
下面是几个最可能触发这个错误的场景:
OrderItem模型序列化/反序列化的字段类型不匹配
比如你的OrderItem类里定义了一个int类型的字段(比如itemId),但对应的JSON数据里这个字段是一个嵌套的Map结构;或者你在fromJson方法里,错误地用as int去强转一个实际是Map的字段。举个例子:// 错误示例:假设JSON里的itemDetails是一个Map,但模型里定义成int final int itemDetails; OrderItem.fromJson(Map<String, dynamic> json) : itemDetails = json['itemDetails'] as int;如果接口返回的
itemDetails是{"id": 1001, "name": "商品A"}这种Map,上面的代码就会直接触发你遇到的异常。REST请求发送时的参数类型错误
在构造请求体的时候,你可能把一个Map类型的值错误赋值给了原本应该是int类型的参数。比如后端接口要求quantity字段是int,但你在把OrderItem序列化成JSON时,这个字段被处理成了Map(比如写成'quantity': {'count': 5}而不是'quantity': 5),导致请求体里的类型不符合预期,进而触发类型转换错误。请求响应解析时的类型误判
如果你的saveOrderItemList方法在处理接口响应时,错误地把响应体中的某个Map字段当成int来转换。比如你想获取响应里的code字段(预期是int),但不小心写成了response.data['data'] as int,而response.data['data']实际是一个包含多字段的Map。
快速排查建议
- 先定位错误发生的具体代码行:可以在
saveOrderItemList和OrderItem的fromJson/toJson方法中添加打印日志,输出要转换的JSON数据,对比模型类的字段类型。 - 核对
OrderItem模型类与JSON结构的匹配度:确保每个字段的类型和JSON中的对应值类型完全一致,比如JSON是int就用int,JSON是嵌套对象就定义对应的子模型类。 - 检查
toJson方法的实现:确认序列化后的每个字段类型都符合后端接口的要求,避免把int字段序列化成Map。
内容的提问来源于stack exchange,提问作者PeakGen

