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

Flutter调用API报错:'int'非'String'子类型的原因及解决

问题原因及解决方案

核心问题

你触发这个错误的根本原因是用错了解析方法:

  • API返回的id、user、workout本身就是整数类型(int),但你却调用了int.parse()方法——这个方法的作用是把字符串(String)转换成整数,它要求传入的参数必须是String类型。
  • 当你直接把JSON里的int值传给int.parse()时,就会出现“int类型无法转成String类型”的类型不匹配错误,这和你模型类里字段声明为int没关系,问题出在解析逻辑的参数类型不匹配。

正确的解析方式

直接把JSON中的对应值强转为int即可,不需要用int.parse():

factory Exercises_Model.fromJson(Map<String, dynamic> json) {
  return Exercises_Model(
    id: json['id'] as int,
    active: json['active'] as bool,
    name: json['name'] as String,
    user: json['user'] as int,
    workout: json['workout'] as int,
  );
}

额外处理:API返回值可能混有字符串和整数的情况

如果API偶尔会把这些字段返回成字符串(比如有时候是"123",有时候是123),可以加个判断兼容两种情况:

int _parseInt(dynamic value) {
  if (value is String) {
    return int.parse(value);
  } else if (value is int) {
    return value;
  }
  throw FormatException('无法解析为整数: $value');
}

// 在fromJson里调用这个方法
factory Exercises_Model.fromJson(Map<String, dynamic> json) {
  return Exercises_Model(
    id: _parseInt(json['id']),
    active: json['active'] as bool,
    name: json['name'] as String,
    user: _parseInt(json['user']),
    workout: _parseInt(json['workout']),
  );
}

内容的提问来源于stack exchange,提问作者Shiko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:35:28