如何在 Dart 空值安全之后对空值进行多重检查?

How to do a multi check for null values after Dart null safety?

int? foo, bar, baz;
bool get allGood => foo != null && bar != null && baz != null;

void f1() {
  if (allGood) {
    print('${foo.abs()} ${bar.abs()} ${baz.abs()}}'); // Error
  }
}

void f2() {
  if (allGood) {
    print('${foo.ceil()} ${bar.ceil()} ${baz.ceil()}}'); // Error
  }
}

在空安全之前,我一直在我的项目中使用这个模式,但目前它导致了一个错误。我知道在检查 if 条件时我可以使用 variable!.function() 但是有没有更好的写法我不知道。

我要做的是内联检查:

void f1() {
  var foo = this.foo, bar = this.bar, baz = this.baz;
  if (foo != null && bar != null && baz != null) {
    print('${foo.abs()} ${bar.abs()} ${baz.abs()}}');
  }
}

如果我真的想要重用测试代码,我会做类似的事情:

void ifAllGood(void Function(int, int, int) action) {
  var foo = this.foo, bar = this.bar, baz = this.baz;
  if (foo != null && bar != null && baz != null) {
    action(foo, bar, baz);
  }
}
void f1() {
  ifAllGood((foo, bar, baz) {
    print('${foo.abs()} ${bar.abs()} ${baz.abs()}}');
  });
}
void f1() {
  ifAllGood((foo, bar, baz) {
    print('${foo.ceil()} ${bar.ceil()} ${baz.ceil()}}');
  });
}

不太可能值得那么复杂。