问题描述
对于这个代码
@Convert(converter = PointConverter,dbType = String)
Point? origo;
我明白了
未定义的名称“Convert”用作注释。 尝试定义名称或从另一个库中导入。dart(undefined_annotation)
linter 错误消息。 objectBox-dart 中没有对象转换方法吗?
我试过了:https://docs.objectbox.io/advanced/custom-types
解决方法
没有像 ObjectBox-Java 中那样的 @Convert
注释。在 Dart 中,您可以使用 dart getter 和 setter 在线定义转换器。例如,这样的事情应该创建一个字符串数据库字段 dbPoint
,同时跳过 point
,因为它的类型未知。
import 'dart:math';
import 'package:objectbox/objectbox.dart';
@Entity()
class SomeClass {
int? id;
Point<double>? point;
String? get dbPoint => point == null ? null : '${point.x} ${point.y}';
set dbPoint(String? value) {
if (value == null) {
point = null;
} else {
final components = value.split(' ');
if (components.length != 2) {
throw ArgumentError.value(value,'value',"Given value doesn't look like a point representation");
}
point = Point(double.parse(components[0]),double.parse(components[1]));
}
}
}
当然,这只是一个示例,您可以使用任何您想要的转换,转换为 ObjectBox 支持的任何类型。例如。如果将上面的转换为二进制向量 (Uint8List
),效率会更高。