对 isar 数据库和 JsonSerialized 使用单个 Flutter 模型

问题描述 投票:0回答:0

我正在尝试使用单一模型来使用 Isar 在本地存储数据,并与 Retrofit 一起使用来处理 REST API 请求。

但是 Isar 要求所有链接类都使用数据类型

IsarLink<MyClassName>
进行定义,其中 JsonSerialized 要求它们使用
MyClassName
作为数据类型。

@Collection()
@JsonSerializable()
class UserGroup {
  @JsonKey(ignore: true)
  Id localId = Isar.autoIncrement; // you can also use id = null to auto increment

  @ignore
  @JsonKey(name: "_id")
  String? id;

  String name;
  String description;

  @ignore
  Domain? domain;
  
  @ignore
  UserGroupPermissions permissions;

  @ignore
  Organization? organization;

  
  @JsonKey(ignore: true)
  IsarLink<Organization?> organization = IsarLink<Organization?>();

  UserGroup({
    this.id,
    required this.name,
    required this.description,
    this.domain,
    required this.permissions,
    this.organization,
  });

  factory UserGroup.fromJson(Map<String, dynamic> json) => _$UserGroupFromJson(json);
  Map<String, dynamic> toJson() => _$UserGroupToJson(this);
}

除了定义两个变量,例如

IsarLink<MyClassName> localOrganization
@JsonKey(ignore: true)
代表 Isar
MyClassName
@ignore
代表 JsonSerialized,还有其他方法可以使用单个变量来处理这两个变量吗?

几乎在任何地方都必须定义两个变量来支持两个生成器,这使得代码看起来非常混乱

flutter model retrofit json-serializable flutter-isar
© www.soinside.com 2019 - 2024. All rights reserved.