dev*_*uaz 14 dart flutter dart-null-safety
谁能解释一下使用它之间的区别:
final block = blocks?.first;
Run Code Online (Sandbox Code Playgroud)
和这个:
final block = blocks!.first;
Run Code Online (Sandbox Code Playgroud)
哪里blocks:
List<Block>? blocks
Run Code Online (Sandbox Code Playgroud)
Ham*_*med 35
简而言之,第一行代码将返回nullifblocks null,第二行代码将返回throw an exceptionifblocksis null。
当您使用时blocks?.first, 的值blocks可以为null,但是当您使用时blocks!.first,您通知编译器您确定不blocks为null。
final block = blocks!.first;意味着您完全确信它List<Block>? blocks在块分配之前已初始化。
同样,在final block = blocks?.first;,中block可为空,但在final block = blocks!.first;,中block则不可为空。
List<Block>? blocks;
...
// you are not sure blocks variable is initialized or not.
// block is nullable.
// return null if blocks is null.
final Block? block = blocks?.first;
// you are sure blocks variable is initialized.
// block is not nullable.
// throw an error if blocks is null.
final Block block = blocks!.first;
Run Code Online (Sandbox Code Playgroud)