Dart中,用于方法的null-aware运算符与??运算符的组合不能很好地工作.

具有如下调用链的图像:

object.getter.getter.getter.getter

现在,当object可能为空并且我不希望出现异常时,我必须编写以下代码:

object?.getter?.getter?.getter?.getter

这是针对每个getter的NULL判断,即使只有object个可能为NULL,但是getter显然不起作用.

我同意.但现在我有一个场景,如果为null,我想返回另一个值,但我正在处理一个列表:

list[index][index][index]

如何在列表getter上使用支持NULL的运算符?

This does not work:

list?[index]

这在Dart年的List年里是不存在的.

list?.get(index)

我想要达到这样的效果:

list?[index]?[index]?[index] ?? 0

我知道只有list会变成null.

long个代码可以工作:

list == null ? 0 : list[index][index][index]

推荐答案

索引运算符([])没有可识别NULL的运算符

您可以改用elementAt():

list?.elementAt(index)?.elementAt(index)?.elementAt(index) ?? 0

UPDATE - 2021/05/24

如果您使用的是NULL-SAFE,则现在可以使用以下命令:

list?[index]?[index]?[index] ?? 0

Dart相关问答推荐

触发从小部件到状态对象的函数

如何从 Dart 中的映射中过滤空值

如何使用Flutter在按钮网格中滑动(swipe)/拖动(drag) 2 个或更多按钮

在小部件之间画一条线

Flutter更新导航栏

如何调整ShowDialog的子级大小

在 Dart 中,是否可以有一个 const 闭包映射?

谷歌dart Regions?

如何解决Id does not exist错误?

在向下滚动时隐藏底部导航栏,反之亦然

如何使用 Dart 动态加载 HTML 并插入我的网页?

在Flutter 中使用 import 'dart:html' - 我需要额外的依赖项吗?

如何判断设备是否需要 SafeArea?

Dart 中的动态类方法调用

如何在 Dart 中调用超类的构造函数和其他语句?

如何用dart语言初始化超类变量?

Dart:你如何让 Future 等待 Stream?

Dart 的Expando功能是什么,它有什么作用?

在 Dart 中,List.from 和 .of 以及 Map.from 和 .of 有什么区别?

Exception: Concurrent modification during iteration: Instance(length:17) of '_GrowableList';