如何将一个大项目迁移到 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

但我建议您不要使用此自动迁移过程,因为它有风险。如果你能手动一个文件一个文件地迁移你的项目就好了,当然这需要时间,但它是更安全的选择。