如何在 Objectbox 中添加对自定义类型的支持?

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

如何在 Objectbox 中添加对自定义类型的支持?

示例:

 class ShopListData {
  int id;
  int amount;
  bool done;
  ProductData productData;

  ShopListData(
      {required this.id,
      required this.amount,
      required this.done,
      required this.productData});
}

class ProductData {
  String? name;
  String? brand;
  String? ingredients;
  String? quantity;

  ProductData({
    this.name,
    this.brand,
    this.ingredients,
    this.quantity,
  });
}

我收到错误的地方:

无法使用“ShopListData”的默认构造函数:不知道如何 初始化参数productData - 没有这样的属性。

我发现一种可能的解决方案是使用 relations,但由于我始终是 1:1 关系,我认为我不需要该选项。

相反,我想在数据库中存储 ShopListData 类定义的数据。我阅读了自定义类型文档。但是我不明白为 ProductData 类型添加支持/转换器需要什么。谁有想法并可以提供如何添加此类支持/转换器的示例?

flutter objectbox
1个回答
0
投票

我已经像这样编辑了你的代码:

@Entity()
class ShopListData {
  int id;
  int amount;
  bool done;
  ProductData productData;

  ShopListData({required this.id, required this.amount, required this.done, required this.productData});

  String get dbProductData => jsonEncode(productData.toJson());

  set dbProductData(String value) => productData = ProductData.fromJson(jsonDecode(value));
}

@Entity()
@JsonSerializable()
class ProductData {
  String? name;
  String? brand;
  String? ingredients;
  String? quantity;

  ProductData({this.name, this.brand, this.ingredients, this.quantity});

  Map<String, dynamic> toJson() => _$ProductDataToJson(this);

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

由于

ProductData
是 objectbox 的自定义类型,应该映射到原始类型,因此我更喜欢将
ProductData
模型存储为 objectbox 中的
String
,并在从数据库中获取后再次将其转换为模型。

参考:https://docs.objectbox.io/advanced/custom-types#convert-annotation-and-property-converter

© www.soinside.com 2019 - 2024. All rights reserved.