繁体   English   中英

Dart null 安全与 if 检查

[英]Dart null safety with if check

我用的是 Dart Null 安全版

有一个小部件:

在此处输入图像描述

itemBuilder需要一个Widget类型。

页脚小部件? 类型和将是 null

为什么 Dart 忽略了我的 null 检查? 我也只找到了一种解决方案:

if (footer != null && index == data.length) {
    return footer ?? const SizedBox();
}

为什么 Dart 忽略了我的 null 检查?

因为当下面的代码执行时:

Widget? footer;

...
if (footer != null && index == data.length) {
    return footer;
}

您的footer有可能从代码的其他部分设置为null ,因此会显示错误。

你可以加! 如果您完全确定footer不会因 rest 的使用寿命而无效。 所以,你可以使用这个:

if (footer != null && index == data.length) {
    return footer!;
}

但您的解决方案更安全,因为它总是检查footer是否不是 null:

if (footer != null && index == data.length) {
    // whenever footer is nulled, return SizedBox
    return footer ?? const SizedBox();
}

正确代码:

final footer = this.footer;
if (footer != null && index == data.length) {
    return footer;
}

为什么? 因为这个 class 的子类可以覆盖页脚吸气剂。 IE:

Widget get footer {
  if (Random().nextBool()) return null;
  else return super.footer;
}

因此,每次对footer的调用都可能返回 null。

就个人而言,我总是在检查后做 '!'( if (footer != null) footer! )。 因为为 getter 提供副作用是一种很大的代码气味。

您可以使用此代码段检查变量是否为 null

a != null && [do something]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM