【问题标题】:Flutter, dart: what's the difference between these snippets of code?Flutter、dart:这些代码片段有什么区别?
【发布时间】:2022-12-12 15:25:32
【问题描述】:

代码 sn-p A 正在工作,但不是 sn-p B。我用 print() 检查变量“图像”的数据类型,A 和 B 的图像(变量)都具有数据类型(XFile),而不是 Null。但是B还是不行....

final XFile? image = await _picker.pickImage(source: ImageSource.gallery);

print(image);

// Code snippet A
if (image == null) return null;
return File(image.path);

// Code snippet B
return File(image!.path);

【问题讨论】:

  • imagenull时,“A”返回null。 “B”在imagenull时抛出异常。
  • 因为 image 变量可以为 null,所以如果你用 code B 接收到 null,它会返回一个异常 !!!

标签: flutter dart dart-null-safety flutter-image-picker


【解决方案1】:

您的代码 sn-p A 的含义是:

如果 image 变量为 null,它将返回 null,否则它将返回 image 变量。

您的代码 sn-p B 的含义是:

它返回 image 变量,尽管 image 变量可能为空。

如果你使用代码sn-p B,你使用!并将变量从可空类型更改为不可空类型,并且该变量实际上为空(没有值)并且你不能使用.path所以它返回一个错误。

【讨论】:

    【解决方案2】:

    image可以是null,在代码A中你检查nullable值所以你不会得到exception,但是在代码B中你在nullable值上使用!错误的。

    如果你寻找简短的形式,你可以试试这个:

    return image == null ? null : File(image.path);
    

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 2021-01-06
      • 2012-09-27
      • 2018-11-13
      • 2021-12-17
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多