fromJson 类方法的空安全
Null-safety for fromJson like methods
我想在 Flutter 2.0.5
中定义一个简单的 class 模型 UserResponse
并构建一个附加到此 class 的 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
方法,我应该如何在这个方法中创建新的Instance?我不想将 class 中的 name
字段更改为 late
。
据此很相似主要有以下几种方式:
为方法使用初始化列表
使用工厂方法
因此,
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,
);
}
使用 factory 构造函数。
class UserResponse {
final String name;
UserResponse({
required this.name,
});
factory UserResponse.fromJson(Map<String, dynamic> json) {
return UserResponse(name: json['name'].toString());
}
}
为了空安全。您需要以正确的方式检查 null。前端需要处理服务器不 return 这个键,我们需要模拟数据,确保应用程序不会崩溃。
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,
};
}
我想在 Flutter 2.0.5
中定义一个简单的 class 模型 UserResponse
并构建一个附加到此 class 的 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
方法,我应该如何在这个方法中创建新的Instance?我不想将 class 中的 name
字段更改为 late
。
据此很相似
为方法使用初始化列表
使用工厂方法
因此,
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,
);
}
使用 factory 构造函数。
class UserResponse {
final String name;
UserResponse({
required this.name,
});
factory UserResponse.fromJson(Map<String, dynamic> json) {
return UserResponse(name: json['name'].toString());
}
}
为了空安全。您需要以正确的方式检查 null。前端需要处理服务器不 return 这个键,我们需要模拟数据,确保应用程序不会崩溃。
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,
};
}