如何在 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 类型添加支持/转换器需要什么。谁有想法并可以提供如何添加此类支持/转换器的示例?
我已经像这样编辑了你的代码:
@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