为什么映射可为 null 的集合在 dart 中总是不为空?

Why mapping nullable collection is always not null in dart?

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 行中使用 null-aware 运算符,这对编译器来说没问题。此外,当我使用它时,分析器说接收器不能为空。 为什么会这样?

在 Dart 2.12 中,?. 被短路了。

来自 Understanding null safety 文档:

To address this, we borrowed a smart idea from C#’s design of the same feature. When you use a null-aware operator in a method chain, if the receiver evaluates to null, then the entire rest of the method chain is short-circuited and skipped.

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