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_captain
,isCaptain
将获得默认值 false
。
我很困惑,因为 freezed's documentation 说添加 @Default
也会自动将 defaultValue
添加到 @JsonKey(...)
,但这里似乎并非如此。我错过了什么?
Freezed 添加了一个具有默认值的隐式 JsonKey。
您的问题是您传递了自定义 JsonKey。在这种情况下,您的注释会接管 Freezed 自动生成的内容。
因此,通过指定 JsonKey,您基本上删除了 Freezed 添加的隐式默认值。
我有一个名为 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_captain
,isCaptain
将获得默认值 false
。
我很困惑,因为 freezed's documentation 说添加 @Default
也会自动将 defaultValue
添加到 @JsonKey(...)
,但这里似乎并非如此。我错过了什么?
Freezed 添加了一个具有默认值的隐式 JsonKey。
您的问题是您传递了自定义 JsonKey。在这种情况下,您的注释会接管 Freezed 自动生成的内容。
因此,通过指定 JsonKey,您基本上删除了 Freezed 添加的隐式默认值。