Dart 空安全:操作数不能为空,因此条件始终为真

Dart null safety: the operand cannot be null, so the condition is always true

我正在尝试仔细检查用户对象是否已成功创建,但是 Null saftey 说 the operand cannot be null, so the condition is always true

如果在 json 数据包含无效类型的情况下,在这种情况下创建用户对象时可能会出现一些错误

class User {
  String? name;
  String? age;

  User({name, age}) {
    this.name = name;
    this.age = age;
  }

  factory User.fromJson(dynamic json) {
    return User(name: json['name'], age: json['age']);
  }
}

void main() {
  String data = '{name: "mike",age: "2"}';

  User user = User.fromJson(data);

  if (user != null) { // Warning: "The operand can't be null, so the condition is always true. Remove the condition."

  }
}

请指教,谢谢! :)

如果从 JSON 输入创建 User 对象时出现错误,在您的情况下,它会抛出一个 Exception 如果没有捕获,程序将崩溃.

所以在你的情况下变量 user 不能是 null,这就是警告告诉你的。

如果你想要某种User.tryFromJson,其中returns null 以防出现任何问题,你可以添加这样的东西给你User class:

  static User? tryFromJson(dynamic json) {
    try {
      return User.fromJson(json);
    } catch (_) {
      return null;
    }
  }

还有一些小意见。您的 User 构造函数没有多大意义,因为您可以改为编写以下内容:

User({this.name, this.age});

此外,我会提出两个参数 required 并阻止可为空的类型。所以像这样(也将 age 更改为 int):

class User {
  String name;
  int age;

  User({
    required this.name,
    required this.age,
  });

  factory User.fromJson(dynamic json) => User(
        name: json['name'] as String,
        age: json['age'] as int,
      );

  static User? tryFromJson(dynamic json) {
    try {
      return User.fromJson(json);
    } catch (_) {
      return null;
    }
  }
}

void main() {
  final data = '{name: "mike",age: 2}';
  final user = User.fromJson(data);
}