dart freezed @Default 不在 JsonKey 上应用 defaultValue

dart freezed @Default doesn't apply defaultValue on JsonKey

我有一个名为 Player (player.dart) 的 class,它有一个名为 isCaptain:

的字段
@JsonKey(name: "is_captain") @Default(false) bool isCaptain,

上面的行在 player.g.dart 中产生以下内容:

isCaptain: json['is_captain'] as bool,

当我使用 Player.fromJson(playerJson) 创建缺少 is_captain 键的 Player 对象时,isCaptain 在 [=14= 上设置为 null ] 对象而不是 @Default.

提供的 false

当我将defaultValue: false添加到@JsonKey(...)时,如下所示:

@JsonKey(name: "is_captain", defaultValue: false) @Default(false) bool isCaptain,

...player.g.dart 中的实现更改为:

isCaptain: json['is_captain'] as bool? ?? false,

现在一切正常,如果 API 响应中不存在 is_captainisCaptain 将获得默认值 false

我很困惑,因为 freezed's documentation 说添加 @Default 也会自动将 defaultValue 添加到 @JsonKey(...),但这里似乎并非如此。我错过了什么?

Freezed 添加了一个具有默认值的隐式 JsonKey。

您的问题是您传递了自定义 JsonKey。在这种情况下,您的注释会接管 Freezed 自动生成的内容。

因此,通过指定 JsonKey,您基本上删除了 Freezed 添加的隐式默认值。