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
相关产品推荐
相关产品推荐

