【问题标题】:dart freezed default for empty class飞镖冻结空类的默认值
【发布时间】:2021-09-14 21:37:16
【问题描述】:
  @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 得到一个空或 null abc json 值,什么是合适的值放在 @Default() 冻结注解,@Default(ABCModel()) 不正确

【问题讨论】:

  • 默认值是有意义的。我们无法读懂你的想法,也不知道这个类的用途或数据的重要性,所以决定权在你。
  • 如果放@Default(ABCModel())会报错
  • 那个错误是?
  • 是的,我也为此苦苦挣扎了一段时间。我最终使它们没有默认值。喜欢:ABCModel? abc,并将它们留空。然后制作了一个命名工厂构造函数,填充了模型道具。

标签: flutter dart freezed flutter-freezed


【解决方案1】:

注意下面的 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 2021-06-09
    • 2020-07-30
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    相关资源
    最近更新 更多