objectbox-dart 中的 Convert 注释在哪里?

问题描述

对于这个代码

@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),效率会更高。