有什么作用!在 Flutter/Dart 中做什么?

dar*_*tar 3 dart flutter

非常简单和“菜鸟”的问题,但有什么作用!在飞镖中做什么?

这是一个例子:

File? _selectedFile;

Widget joe() {
  if (_selectedFile != null) {
    return Image.file(
      _selectedFile!, // can't do _selectedFile?
      width: 250,
      height: 250,
      fit: BoxFit.cover,
    );
  }
  return Text("mama");
}
Run Code Online (Sandbox Code Playgroud)

我知道?inFile? _selectedFile意味着 _selectedFile 允许为空。但是当我_selectedFile?在 Widget 函数中执行此操作时,它会抛出错误,但当我执行此操作时_selectedFile!,它会起作用。为什么会这样?

Dav*_*nan 5

感叹号是一个危险但功能强大的运算符。

它告诉编译器假设值不为空。

当您执行此操作时,该类型将从可为空类型转换为不可为空类型,并且可以在仅接受不可为空值的地方使用。

当您执行此操作时,您必须完全相信您的代码不会意外使用空值。

更多信息请参见此问题/答案


在您的具体情况下,我们可以确定该值不为空,因为您的 if 语句检查了这一点。

因此,我想您可以直接使用_selectedFile而无需任何额外的运算符。当你这样做时,你迫使编译器证明你的代码的安全性,而不是你仅仅相信自己。如果编译器满意,代码就会编译。我没有使用过 Dart,所以我不知道编译器有多智能,但希望它可以处理这种情况,而不需要你冒操作员的风险!