类fromJson方法的空安全性



我想在Flutter2.0.5中定义一个简单的类模型UserResponse,并构建一个附加到该类的fromJson方法,以便在从后端接收到json格式的数据后轻松创建实例。

class UserResponse {
String name;
UserResponse ({
required this.name,
});
UserResponse.fromJson(Map<String, dynamic> json) {
name= json['name'].toString();
}
}

然而,dart编译器在这里抛出一个错误:dart(not_initialized_non_nullable_instance_field)

此外:必须初始化不可为null的实例字段"name"。尝试添加初始值设定项表达式,或在此构造函数中添加字段初始值设定值设定项,或将其标记为"late"。

如果我知道只有在拥有所有必需数据的情况下才会调用fromJson方法,那么我应该如何在该方法中创建新实例?我不想将类中的name字段更改为late

使用工厂构造函数。

class UserResponse {
final String name;
UserResponse({
required this.name,
});
factory UserResponse.fromJson(Map<String, dynamic> json) {
return UserResponse(name: json['name'].toString());
}
}

用于零安全。您需要以正确的方式检查null。前端需要处理服务器不返回这个密钥,我们需要模拟数据,确保应用程序不会崩溃。

class UserResponse {
UserResponse({
this.name,
});
final String? name;
factory UserResponse.fromRawJson(String str) =>
UserResponse.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory UserResponse.fromJson(Map<String, dynamic> json) => UserResponse(
name: json["name"] == null ? null : json["name"].toString(),
);
Map<String, dynamic> toJson() => {
"name": name == null ? null : name,
};
}

根据这个非常相似的问题,主要有以下几种方法:

  1. 使用方法的初始值设定项列表

  2. 使用工厂方法

因此,

UserResponse.fromJson(Map<String, dynamic> json) :
name= json['name'] as String;

factory UserResponse.fromJson(Map<String, dynamic> json) {
return UserResponse(
name: json['name'] as String,
);
}

相关内容

最新更新