Sca*_*aux 3 dart flutter dart-null-safety
最近迁移到 Flutter null 安全功能,我有很多类需要更新。
对于我的模型,我使用fromJsonjson 对象反序列化数据。late这迫使我为每个非可选字段添加关键字。
这是正确的做法吗?
class ServerSession {
late String sessionId;
late String refreshToken;
late String accessToken;
ServerSession({required this.sessionId, required this.refreshToken, required this.accessToken});
ServerSession.fromJson(Map<String, dynamic> json) {
sessionId = json['session_id'] ?? json['sessionId'];
refreshToken = json['refresh_token'] ?? json['refreshToken'];
accessToken = json['access_token'] ?? json['accessToken'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['sessionId'] = this.sessionId;
data['refreshToken'] = this.refreshToken;
data['accessToken'] = this.accessToken;
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
不它不是。您应该使用初始化列表来初始化类的字段。您可以在语言教程中阅读有关初始化程序列表的更多信息。
class ServerSession {
String sessionId;
String refreshToken;
String accessToken;
ServerSession({required this.sessionId, required this.refreshToken, required this.accessToken});
ServerSession.fromJson(Map<String, dynamic> json) :
sessionId = json['session_id'] ?? json['sessionId'],
refreshToken = json['refresh_token'] ?? json['refreshToken'],
accessToken = json['access_token'] ?? json['accessToken'];
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['sessionId'] = this.sessionId;
data['refreshToken'] = this.refreshToken;
data['accessToken'] = this.accessToken;
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
我个人会使用对象的“普通”构造函数并创建fromJson一个工厂构造函数,尽管这两种方法都有效。
class ServerSession {
String sessionId;
String refreshToken;
String accessToken;
ServerSession({required this.sessionId, required this.refreshToken, required this.accessToken});
factory ServerSession.fromJson(Map<String, dynamic> json) {
return ServerSession(
sessionId: json['session_id'] ?? json['sessionId'],
refreshToken: json['refresh_token'] ?? json['refreshToken'],
accessToken: json['access_token'] ?? json['accessToken']
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['sessionId'] = this.sessionId;
data['refreshToken'] = this.refreshToken;
data['accessToken'] = this.accessToken;
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7737 次 |
| 最近记录: |