为什么映射可空集合总是不空?


1      factory SuggestSessionResult.fromJson(Map<String, dynamic> json) {
2        final String? error = json['error'];
3        final List<Map<String, dynamic>>? items = json['items'];
4        return SuggestSessionResult(
5          items
6            ?.map((it)=>SuggestItem.fromJson(it))
7            .toList(),
8          error
);
}

你好!正如您所看到的,我没有在第7行中使用空感知运算符,这对编译器来说没有问题。此外,当我使用它时,分析器说接收器不能为空。为什么如此?

在Dart 2.12中,?.被短路。

来自理解null安全文件:

为了解决这个问题,我们借用了c#设计相同功能的一个聪明的想法。当您在方法链中使用空感知运算符时,如果接收器的计算结果为null,则方法链的整个其余部分将短路并跳过

在您的情况下,.map()如果调用,不能返回null(因为Iterable.map不返回可空类型)。因此,.toList()要么永远不会被调用(因为.map()在方法链的前面没有被调用),要么将保证在非空值时被调用。

相关内容

  • 没有找到相关文章

最新更新