gpt4 book ai didi

Dart null safety : the operand cannot be null, 所以条件总是为真

转载 作者:行者123 更新时间:2023-12-05 03:39:48 26 4
gpt4 key购买 nike

我正在尝试仔细检查用户对象是否已成功创建,但是 Null saftey 说操作数不能为空,因此条件始终为真

如果在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 在出现任何问题时返回 null ,你可以添加这样的东西给你 User类:

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

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

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

此外,我会将两个参数都设置为必需 并阻止可空类型。所以像这样(也将 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);
}

关于Dart null safety : the operand cannot be null, 所以条件总是为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68466418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com