dart/flutter 中的这个一元后缀是什么?

What is this unary postfix in dart/flutter?

我在 Dart/flutter 代码中看到了这个一元后缀:?.

像这样:

videoController?.dispose();

我想知道它是如何工作的...

它测试 null,

https://www.dartlang.org/guides/language/language-tour

"?. 条件成员访问 类似于 .,但最左边的操作数可以为空;示例:foo?.bar 从表达式 foo 中选择 属性 bar 除非 foo 为空(在这种情况下 foo 的值?.bar 为 null)"

这是一个null-aware运算符。它是以下的缩写形式。

代码

 ((obj) => obj == null ? null : x.method())(object)
 // is equal to
 object?.method()

您可以了解更多 about null-aware operators here

说明

读作:

  • 如果object不是null

  • ,则只执行method
  • 如果objectnullreturnnull(否则从method求值)

这是 Dart 中的一个很棒的功能

意思是 当且仅当该对象不为 null 否则,return null.

简单示例:

void main() {
  Person p1 = new Person("Joe");
  print(p1?.getName); // Joe

  Person p2;
  print(p2?.getName); // null

  //print(p2.getName); // this will give you an error because you cannot invoke a method or getter from a null
}

class Person {
  Person(this.name);
  String name;

  String get getName => name;
}

还有其他很酷的 null 感知运算符,例如 ?? 以了解有关 null 感知运算符的更多信息。