Flutter HTTP请求报错:type 'int' is not a subtype of type 'String?'
问题排查与解决:
type 'int' is not a subtype of type 'String?' 错误 这个错误的核心原因是JSON解析时字段类型不匹配:API返回的某个字段是整数类型,但你的数据模型类对应字段定义为String?,或者在解析/赋值过程中错误地将int类型值直接赋给了String类型变量。以下是具体排查和解决步骤:
1. 对比API响应与数据模型类字段类型
先把API返回的JSON响应和你的数据模型类逐字段对比,确保类型完全一致:
- 举个典型场景:如果API返回的
id字段是123(int类型),但你的模型类里定义为String? id,直接赋值就会触发该错误。 - 示例错误模型类:
class User { String? id; // 错误:API返回的id是int类型 String? name; User.fromJson(Map<String, dynamic> json) { id = json['id']; // int赋值给String?,触发类型不匹配 name = json['name']; } }
2. 修正数据模型类或解析逻辑
根据实际需求选择两种修正方式:
方式一:匹配API字段类型
如果模型类字段应该是int类型,直接修改类型定义:
class User { int? id; // 改为int?,和API返回类型一致 String? name; User.fromJson(Map<String, dynamic> json) { id = json['id'] as int?; name = json['name'] as String?; } }
方式二:显式转换类型(如果需要String类型)
如果业务上需要把int类型字段转为String,在解析时显式调用toString():
class User { String? id; String? name; User.fromJson(Map<String, dynamic> json) { id = json['id']?.toString(); // 先判断非空,再转String name = json['name'] as String?; } }
3. 排查UI渲染环节的潜在问题
如果解析逻辑没问题,检查UI代码中是否直接将int类型字段当作String使用:
- 错误示例:
Text(user.id)(id是int类型,无法直接传给Text的String参数) - 修正:
Text(user.id.toString())
额外提醒
如果使用json_serializable等代码生成工具处理解析:
- 确保字段的类型注解完全正确
- 修改类型后重新运行生成命令(
flutter pub run build_runner build)
内容的提问来源于stack exchange,提问作者sakib Ovi
相关产品推荐
相关产品推荐

