Flutter中String与int类型不匹配错误排查求助
问题原因与解决思路
核心原因
你遇到的双向类型不匹配,本质是后端API返回的目标字段存在混合类型——比如某个字段(如id、count这类常见字段),部分数据条目返回的是数字类型(int),部分返回的是字符串类型(如"123")。当Model字段定义为int时,解析到字符串类型的条目就会触发type 'String' is not a subtype of type 'int'错误;改成String时,解析到数字类型的条目则会出现反向的类型不匹配错误。
排查与解决步骤
确认API返回的JSON结构
用print或日志工具输出完整的API响应JSON,逐个检查目标字段的类型是否统一。比如多找几个数据条目,观察同一个字段的值是数字(如123)还是带引号的字符串(如"123")。修改Model的解析逻辑,兼容混合类型
不要直接用固定类型定义字段,而是在fromJson构造方法中做类型兼容处理,示例如下:
假设目标字段是id,需要统一转为String:class YourModel { final String id; YourModel({required this.id}); factory YourModel.fromJson(Map<String, dynamic> json) { String idValue; if (json['id'] is int) { idValue = json['id'].toString(); } else if (json['id'] is String) { idValue = json['id']; } else { // 处理异常情况,设置默认值 idValue = '0'; } return YourModel(id: idValue); } }如果需要统一转为int:
class YourModel { final int id; YourModel({required this.id}); factory YourModel.fromJson(Map<String, dynamic> json) { int idValue; if (json['id'] is String) { idValue = int.parse(json['id']); } else if (json['id'] is int) { idValue = json['id']; } else { // 处理异常情况,设置默认值 idValue = 0; } return YourModel(id: idValue); } }排查其他潜在问题
- 检查字段名拼写是否一致:比如Model里定义的
userId,但API返回的是user_id,导致解析时拿到无关字段的错误类型值。 - 确认JSON嵌套层级是否正确:比如应该取
json['data']['id'],但误写成json['id'],拿到上层不符类型的值。
- 检查字段名拼写是否一致:比如Model里定义的
内容的提问来源于stack exchange,提问作者Supermages
相关产品推荐
相关产品推荐

