在 null safe Dart 中从 API 中获取数据时,字段应该保留为 null 还是初始化为默认值?

Should a field be left null or initialized to a default value when fetching data from an API in null safe Dart?

从 api 中检索某些内容时,是否应该为每个空字段设置一个值?或者我应该让它们保持为空并在显示它们时检查它们是否不为空?

例如:

  factory Geo.fromJson(Map<String, dynamic> json) => Geo(
    type: json["type"] == null ? 'Point' : json["type"],
    coordinates: json["coordinates"] == null ? [] : List<double>.from(json["coordinates"].map((x) => double.tryParse(x))),
  );

  factory Geo.fromJson(Map<String, dynamic> json) => Geo(
    type: json["type"] == null ? null : json["type"],
    coordinates: json["coordinates"] == null ? null : List<double>.from(json["coordinates"].map((x) => double.tryParse(x))),
  );

编辑 --> 或者我应该像这样用其他方式来做这件事吗?

  factory Location.fromJson(Map<String, dynamic> json) {
    return Location(
      geo: json["geo"] = Geo.fromJson(json["geo"]),
      city: json["city"] = json["city"],
      country: json["country"] = json["country"],
      area: json["area"] = json["area"],
    );
  } 

Dart 中的空安全 不是 摆脱 null 的活动。 null 是有效信息。

举个最简单的例子:我老婆要吃披萨吗?似乎是一个简单的 true/false 问题。直到你认为“我还没有问过她”确实是一个同样有效的现实世界状态。

所以不,你不应该用其他东西替换你所有的 null 值。你会丢失信息。

再说一遍:null 安全并不意味着您摆脱了 null 值。这意味着您不再对空值 感到惊讶

如果您的价值观可以合法地成为 null,那就顺其自然吧。

您现在获得了改进的编译器支持,以确保您不会失误并错误地认为它们始终为非空值。那太棒了。开心就好。