Flutter null safety with fromJson
5,111
No, it is not. You should be using the initializer list for initializing fields of your class. You can read more about the initializer list in the language tour.
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;
}
}
I personally would use the "normal" constructor for the object and make fromJson
a factory constructor, though either method works.
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;
}
}
![Scaraux](https://i.stack.imgur.com/YJqNZ.jpg?s=256&g=1)
Comments
-
Scaraux over 1 year
Recently migrating to Flutter null safety feature, I have a lot of Classes that I need to update.
For my models, I use
fromJson
to deserialize the data from a json object. This forces me to put thelate
keyword for each field that is non optional.Is that the right approach?
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; } }