Flutter调用REST API时出现‘Null’不是‘String’子类型错误
错误解决:type 'Null' is not a subtype of type 'String'
错误原因
报错指向package:getx_5_rest_api/models/product.dart的第33行(Welcome.fromJson方法),本质是:你把API返回的JSON数据转成Welcome模型时,JSON里某个本该是字符串的字段返回了null,但你的模型类把这个字段定义成了非空的String类型,Dart的类型检查不允许把null赋值给非空变量,所以触发了这个错误。
解决步骤
- 打开
models/product.dart文件,找到Welcome类的fromJson方法,定位第33行,确认是哪个字符串字段出问题(比如title、description这类字段)。 - 针对该字段二选一处理:
- 允许字段为null:把字段类型从
String改成String?(可空字符串),同时fromJson对应代码改成this.字段名 = json['字段名'] as String?, - 给默认值兜底:如果业务上字段不能为null,就给个默认字符串,比如
this.字段名 = json['字段名'] as String? ?? '默认内容';
- 允许字段为null:把字段类型从
- 检查API返回的所有JSON字段,把其他可能返回null的字符串字段都按上述方式处理,避免重复报错。
新手小技巧
如果你用json_serializable自动生成模型代码,可通过注解简化处理:
- 允许空值:直接把字段类型设为
String?(新版Dart),旧版可加@JsonKey(nullable: true) - 设默认值:添加
@JsonKey(defaultValue: '')注解
内容的提问来源于stack exchange,提问作者Saad Mansoor
相关产品推荐
相关产品推荐

