2

从 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"],
    );
  } 
4

1 回答 1

1

Dart 中的 null-safety不是要摆脱null. null是有效信息。

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

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

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

如果你有可以合法存在的价值观null,那么就让它们存在吧。

您现在获得了改进的编译器支持,以确保您不会丢球并错误地认为它们始终为非空值。那太棒了。对此感到高兴。

于 2021-04-01T09:46:45.627 回答