Dart,后面带有感叹号的标识符

lan*_*224 2 dart flutter

最近我一直在用 flutter 开发移动应用程序,当我查看TickerProvider的源代码时,我看到以下行:

mixin SingleTickerProviderStateMixin<T extends StatefulWidget> on State<T> implements TickerProvider {
Ticker? _ticker;

  @override
  Ticker createTicker(TickerCallback onTick) {
    ...
    _ticker = Ticker(onTick, debugLabel: kDebugMode ? 'created by $this' : null);
    return _ticker!;
  }

...
}
Run Code Online (Sandbox Code Playgroud)

我对这条线很感兴趣:

return _ticker!;
Run Code Online (Sandbox Code Playgroud)

我在前面看到了带有感叹号的布尔标识符,这意味着它将返回它的相反值,但我从未见过这个。有人能告诉我这是做什么的吗?

Dom*_*ník 9

这是 Dart 具有的零安全性的一部分。

你可以在这里阅读

If you’re sure that an expression with a nullable type isn’t null, you can add ! to make Dart treat it as non-nullable
Run Code Online (Sandbox Code Playgroud)

例子:

int? aNullableInt = 2;
int value = aNullableInt!; // `aNullableInt!` is an int.
// This throws if aNullableInt is null.
Run Code Online (Sandbox Code Playgroud)