如何将一个大项目迁移到 null safety 以处理 flutter 中的 json 数据
how to migrate a big project to null safety for handling json data in flutter
我已经有几个月没有在 flutter 中工作了,当我在这么长时间后打开时,看到了很多错误,我刚刚将所有软件包升级到最新版本,升级后我才知道它现在只会使用 null 安全,因为 flutter 现在是 null 安全,我是否需要将我的所有变量转换为 null 安全,因为有时会出现 null 数据 api 我不知道如何进行每个变量的 null 检查有很多 classes
这是我之前的代码,我只是手动对 LoginResponse 变量进行 nullcheck
LoginResponse loginResponseFromJson(String str) => LoginResponse.fromJson(json.decode(str));
String loginResponseToJson(LoginResponse data) => json.encode(data.toJson());
class LoginResponse {
LoginResponse({
this.loggedIn,
this.user,
});
bool? loggedIn;
User ? user;
factory LoginResponse.fromJson(Map<String, dynamic> json) => LoginResponse(
loggedIn: json["loggedIn"],
user : json['user'] == null ? null : new User.fromJson(json['user']) ,
);
Map<String, dynamic> toJson() => {
"loggedIn": loggedIn,
"user": user == null ?null : user,
};
}
class User {
User({
this.id,
this.name,
this.emailId,
this.contactNumber,
this.password,
this.authToken,
this.roles,
this.companyId,
this.storeName,
this.region,
});
String id;
String name;
String emailId;
dynamic contactNumber;
String password;
String authToken;
String roles;
String companyId;
String storeName;
String region;
factory User.fromJson(Map<String, dynamic> json) => User(
id: json["id"],
name: json["name"],
emailId: json["emailId"],
contactNumber: json["contactNumber"],
password: json["password"],
authToken: json["authToken"],
roles: json["roles"],
companyId: json["companyId"],
storeName: json["storeName"],
region: json["region"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"emailId": emailId,
"contactNumber": contactNumber,
"password": password,
"authToken": authToken,
"roles": roles,
"companyId": companyId,
"storeName": storeName,
"region": region,
};
}
当我像第一个那样放置 nullcheck 时它起作用了 class 请告诉我是否有任何过程可以转换所有的东西而不需要手动完成
您可以使用迁移工具检查 dart null 安全自动迁移过程https://dart.dev/null-safety/migration-guide。
但我建议您不要使用此自动迁移过程,因为它有风险。如果你能手动一个文件一个文件地迁移你的项目就好了,当然这需要时间,但它是更安全的选择。
我已经有几个月没有在 flutter 中工作了,当我在这么长时间后打开时,看到了很多错误,我刚刚将所有软件包升级到最新版本,升级后我才知道它现在只会使用 null 安全,因为 flutter 现在是 null 安全,我是否需要将我的所有变量转换为 null 安全,因为有时会出现 null 数据 api 我不知道如何进行每个变量的 null 检查有很多 classes
这是我之前的代码,我只是手动对 LoginResponse 变量进行 nullcheck
LoginResponse loginResponseFromJson(String str) => LoginResponse.fromJson(json.decode(str));
String loginResponseToJson(LoginResponse data) => json.encode(data.toJson());
class LoginResponse {
LoginResponse({
this.loggedIn,
this.user,
});
bool? loggedIn;
User ? user;
factory LoginResponse.fromJson(Map<String, dynamic> json) => LoginResponse(
loggedIn: json["loggedIn"],
user : json['user'] == null ? null : new User.fromJson(json['user']) ,
);
Map<String, dynamic> toJson() => {
"loggedIn": loggedIn,
"user": user == null ?null : user,
};
}
class User {
User({
this.id,
this.name,
this.emailId,
this.contactNumber,
this.password,
this.authToken,
this.roles,
this.companyId,
this.storeName,
this.region,
});
String id;
String name;
String emailId;
dynamic contactNumber;
String password;
String authToken;
String roles;
String companyId;
String storeName;
String region;
factory User.fromJson(Map<String, dynamic> json) => User(
id: json["id"],
name: json["name"],
emailId: json["emailId"],
contactNumber: json["contactNumber"],
password: json["password"],
authToken: json["authToken"],
roles: json["roles"],
companyId: json["companyId"],
storeName: json["storeName"],
region: json["region"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"emailId": emailId,
"contactNumber": contactNumber,
"password": password,
"authToken": authToken,
"roles": roles,
"companyId": companyId,
"storeName": storeName,
"region": region,
};
}
当我像第一个那样放置 nullcheck 时它起作用了 class 请告诉我是否有任何过程可以转换所有的东西而不需要手动完成
您可以使用迁移工具检查 dart null 安全自动迁移过程https://dart.dev/null-safety/migration-guide。
但我建议您不要使用此自动迁移过程,因为它有风险。如果你能手动一个文件一个文件地迁移你的项目就好了,当然这需要时间,但它是更安全的选择。