You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:05:32