Flutter 2.+空安全下Dio用自定义模型类可空属性设置问题求助
自定义模型类适配空安全的具体方案
1. 基础可空声明
自定义模型类和基础类型的可空声明规则完全一致,直接在自定义类型名称末尾加?即可声明为可空类型,示例如下:
// 错误写法:未声明可空,接口返回空值时直接触发空安全报错 class ApiResponse { int? code; String? message; UserModel data; // 自定义类型未加?,非空强制要求赋值 } // 修正后写法 class ApiResponse { int? code; String? message; UserModel? data; // 加?声明为可空,允许data为null }
2. JSON解析逻辑适配可空
声明可空后需要同步修改fromJson解析逻辑,遇到对应字段为null时不要强行调用子模型的fromJson方法:
class ApiResponse { int? code; String? message; UserModel? data; ApiResponse.fromJson(Map<String, dynamic> json) { code = json['code']; message = json['message']; // 先判断字段是否为null再做解析 if (json['data'] != null) { data = UserModel.fromJson(json['data']); } else { data = null; } } } class UserModel { String? username; int? age; UserModel.fromJson(Map<String, dynamic> json) { username = json['username']; age = json['age']; } }
3. 自动生成方案(推荐)
如果手写模型类容易出错,可以使用官方推荐的json_serializable库自动生成空安全兼容的解析代码,只需给所有可空字段(包括自定义类型)加?声明,生成的代码会自动处理空值判断逻辑,不需要手动写判空代码。
常见报错原因
这类运行时报错通常是两种情况导致:
- 自定义类型字段没有加
?声明可空,接口返回空值时空安全校验不通过 - 已经声明可空,但
fromJson里没有做判空就直接调用子模型的fromJson方法,传入null触发报错
内容的提问来源于stack exchange,提问作者Taki
相关产品推荐
相关产品推荐

