dart 冻结默认为空类

问题描述

  @freezed
  class ABCModel with _$ABCModel {
    factory ABCModel({
      @JsonKey(name: "id") @Default('') String id,@JsonKey(name: "name") @Default('') String name,}) = _ABCModel;

    factory ABCModel.fromJson(Map<String,dynamic> json) => _$ABCModelFromJson(json);
  }


  @freezed
  class EFGModel with _$EFGModel {
    factory EFGModel({
      @JsonKey(name: "abc") @Default(ABCModel()) ABCModel abc,//empty ABCModel
    }) = _EFGModel;

    factory EFGModel.fromJson(Map<String,dynamic> json) => _$EFGModelFromJson(json);
  }

如果 EFGModel 得到一个空的或空的 abc json 值,什么是合适的值放在 @Default() 冻结注解上,@Default(ABCModel()) 是不正确的

解决方法

注意下面的 Player.blank() 构造函数。像这样...

@freezed
class Player with _$Player {
  Player._();

  factory Player({
    @Default('') String handle,@Default('') String realname,Contact? contactinfo,@Default(false) bool emailverified,@Default(false) bool showemail,@Default(false) bool showphone,@Default('') String avatarurl,DateTime? datejoined,@Default(0) int transactions,DateTime? datelasttransaction,DateTime? datelastlogin,@Default([]) List<String> tags,@Default([]) List<String> leagues,@Default([]) List<String> events,@Default(0) int views,@Default(0) int likes,@Default(0) int loginfails,@JsonKey(ignore: true) @Default('') String password,@JsonKey(ignore: true) @Default('') String confirm,required Meta meta,}) = _Player;

  factory Player.blank() => Player(contactinfo: Contact(),meta: Meta());
  factory Player.fromJson(Map<String,dynamic> json) => _$PlayerFromJson(json);