【问题标题】:What does ! do in Flutter/Dart?有什么作用!在 Flutter/Dart 中做什么?
【发布时间】:2021-11-11 21:28:09
【问题描述】:

非常简单和“nooby”的问题,但有什么作用!飞镖?

这是一个例子:

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");
}

我知道File? _selectedFile 中的? 表示允许_selectedFile 为空。但是当我在 Widget 函数中执行 _selectedFile? 时,它会引发错误,但是当我执行 _selectedFile! 时,它会起作用。为什么会这样?

【问题讨论】:

标签: flutter dart


【解决方案1】:

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

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

当您这样做时,该类型会从可空类型转换为不可空类型,并且可以在只接受不可空值的地方使用。

当您这样做时,您必须完全相信您的代码不会意外使用空值。

More information in this question/answer.


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

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

【讨论】:

    【解决方案2】:

    在支持 null 安全的新版本的 dart 中:

    在您的代码中

    ? :表示_selectedFile 可以为空

    如果您在_selectedFile 之后添加!,这意味着您告诉编译器与您已经声明的相反,! 用于使编译器知道_selectedFile 永远不会为空!看看你在这里做什么?

    != 表示“如果不是”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-22
      • 2018-08-12
      • 2018-11-05
      • 2012-05-13
      • 2012-11-01
      • 2018-10-13
      • 2010-12-11
      • 1970-01-01
      相关资源
      最近更新 更多