如何以正确的方式告诉 Flutter 变量可以为 null(Null Safety)?
How to tell Flutter that a variable can be null in the right way (Null Safety)?
我有一个关于 Flutter 和 Null 安全的问题。
例如我有这行代码:
Future<dynamic> isLoggedIn() async {
Account account = Account(client);
Response? result = await account.get();
if (result == null) {
print(true);
}
}
我已经用 Response?
将 result
标记为可为 null 的变量。所以 result
可以为空。为什么 Visual Studio 给我警告 The operand can't be null, so the condition is always false.
,如果我检查 result == null
?
我是否误解了空安全的概念? :-)
Visual Studio 给你警告是因为(我猜是因为我没有看到你的 get 方法)你的 get 方法是 returning 值,它不能是空值
Future<Response> get() async {
...
}
如果你希望它能够 return null 它应该这样声明
Future<Response?> get() async {
...
}
正如 julemand101 所建议的,您的 ide 的行为是由于以下事实:当使用 return 是 non-nullable 类型的方法设置变量时, dart 分析器肯定知道该变量不为空(尽管您声明该变量的类型允许为空)。
我也对这个警告感到有点惊讶,因为如果你通过指定变量的类型来声明变量,而不是使用 var
,我希望 dart 分析器理解开发人员的意图是以防止可能的变化。然后想了想,如果方法改变了签名,returned 一个可为空的类型,编译器会强制开发者进行空检查,所以实际上没有理由进行这样的检查直到真正需要它为止。
但是,您可以使用注释 // ignore: unnecessary_null_comparison
或通过文件 analysis_options.yaml:
使警告消失
analyzer:
errors:
unnecessary_null_comparison: ignore
编辑:
the request can return null from server side.
如果您的 account.get()
方法可以 return null
,ide 将不会向您报告该警告。所以我想这是你方法的签名不正确。
但是,对于标题中的问题(“告诉 Flutter 变量可以为 null 的正确方法”),通过将变量声明为可为空,您可以选择 re-evaluating具有 null 或可空类型的变量(在这种情况下,null 检查才有意义)。
我有一个关于 Flutter 和 Null 安全的问题。
例如我有这行代码:
Future<dynamic> isLoggedIn() async {
Account account = Account(client);
Response? result = await account.get();
if (result == null) {
print(true);
}
}
我已经用 Response?
将 result
标记为可为 null 的变量。所以 result
可以为空。为什么 Visual Studio 给我警告 The operand can't be null, so the condition is always false.
,如果我检查 result == null
?
我是否误解了空安全的概念? :-)
Visual Studio 给你警告是因为(我猜是因为我没有看到你的 get 方法)你的 get 方法是 returning 值,它不能是空值
Future<Response> get() async {
...
}
如果你希望它能够 return null 它应该这样声明
Future<Response?> get() async {
...
}
正如 julemand101 所建议的,您的 ide 的行为是由于以下事实:当使用 return 是 non-nullable 类型的方法设置变量时, dart 分析器肯定知道该变量不为空(尽管您声明该变量的类型允许为空)。
我也对这个警告感到有点惊讶,因为如果你通过指定变量的类型来声明变量,而不是使用 var
,我希望 dart 分析器理解开发人员的意图是以防止可能的变化。然后想了想,如果方法改变了签名,returned 一个可为空的类型,编译器会强制开发者进行空检查,所以实际上没有理由进行这样的检查直到真正需要它为止。
但是,您可以使用注释 // ignore: unnecessary_null_comparison
或通过文件 analysis_options.yaml:
analyzer:
errors:
unnecessary_null_comparison: ignore
编辑:
the request can return null from server side.
如果您的 account.get()
方法可以 return null
,ide 将不会向您报告该警告。所以我想这是你方法的签名不正确。
但是,对于标题中的问题(“告诉 Flutter 变量可以为 null 的正确方法”),通过将变量声明为可为空,您可以选择 re-evaluating具有 null 或可空类型的变量(在这种情况下,null 检查才有意义)。