假设我有一个定义如下的数据模型:
class GymInfo {
final String openDate;
final String phoneNumber;
final String state;
final String clubRegion;
final String email;
final int hasKeypad;
final int isPlatinum;
final String linkClub;
final int id;
final int is24Hour;
final String fullname;
final String type;
GymInfo({this.openDate, this.phoneNumber, this.state, this.clubRegion, this.email, this.hasKeypad, this.isPlatinum, this.linkClub, @required this.id, this.is24Hour, @required this.fullname, this.type,});
factory GymInfo.fromJson(Map<String, dynamic> json) {
return GymInfo(
openDate: json['openDate'],
phoneNumber: json["PhoneNumber"],
state: json["state"],
clubRegion: json["ClubRegion"],
email: json['Email'],
hasKeypad: json['hasKeypad'],
isPlatinum: json['isPlatinum'],
linkClub: json['link_club'],
id: json['id'],
is24Hour: json['is24Hour'],
fullname: json['fullname'],
type: json['type']);
}
}
每当我将JSON映射传递给工厂时,如果该映射没有必需参数的值,我都希望它返回null。目前,它返回的GymInfo实例的所有参数都设置为null,这会给测试带来麻烦。如何确保初始化程序失败并返回null。
答案 0 :(得分:2)
只需添加一个简单的验证即可确保您的必填字段不为空。
factory GymInfo.fromJson(Map<String, dynamic> json) {
final fullnameValue = json['fullname'];
final idValue = json['id'];
if (fullNameValue == null || idValue == null){
return null;
}
return GymInfo(
openDate: json['openDate'],
phoneNumber: json["PhoneNumber"],
state: json["state"],
clubRegion: json["ClubRegion"],
email: json['Email'],
hasKeypad: json['hasKeypad'],
isPlatinum: json['isPlatinum'],
linkClub: json['link_club'],
id: idValue,
is24Hour: json['is24Hour'],
fullname: fullnameValue,
type: json['type']);
}
答案 1 :(得分:1)
这比您想像的要容易得多。
JSON格式是没有任何逻辑的格式。这意味着您应该可以随时更改JSON对象的实现,而不会产生影响。
在这种情况下,在您自己的服务对象中实现所需的逻辑会更正确。
MyJsonObject getMyObject(Object source) {
// ...
var myObject = MyJsonObject.fromJson(json);
if (myObject.someField == null) {
return null;
}
return myObject;
}```