首页 > 解决方案 > 检查 if 条件中使用的 bool 变量的可空性的简写

问题描述

Future<bool?> f() async => true;

void main() async {
  final proceed = await f();
  if (proceed) {...} // Error
  if (proceed != null && proceed) {...} // Works but too verbose
}

是否有任何速记或更好的方法来代替写长proceed != null && proceed支票?我知道我可能会错过一些如此微不足道的东西。

注意:我知道可以提供默认值,proceed但这不是我的用例。Bang 运算符可以做到这一点,但bool实际上不是null

标签: dartdart-null-safety

解决方案


听起来像是您可以使用??语言导览中记录的运算符的情况: https ://dart.dev/guides/language/language-tour#conditional-expressions

它将允许您将长 if 语句重写为:

if (proceed ?? false) {...}

??在这里意味着我们要使用的值proceed只要不是null。如果null我们想false用作值。

这样做的一个缺点是,与之后被提升为不可为空的类型proceed相比,Dart 似乎没有进行任何类型提升:proceed

if (proceed != null && proceed) {...}

不确定是否存在 Dart 问题。


推荐阅读