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()
在方法链的前面没有被调用),要么将保证在非空值时被调用。