如何初始化具有自定义类型的Objectbox实体



我正在使用Objectbox(1.3.0(在Flutter上构建我的数据库。

我尝试创建一个由自定义类型(枚举(组成的实体,如下所示:

type_enum.dart

/// Type Enumeration.
enum TypeEnum { one, two, three }

方法.dart

@Entity()
class Method {
/// ObjectBox 64-bit integer ID property, mandatory.
int id = 0;
/// Custom Type. 
TypeEnum type;
/// Constructor.
Method(this.type);
/// Define a field with a supported type, that is backed by the state field.
int get dbType {
_ensureStableEnumValues();
return type.index;
}
/// Setter of Custom type. Throws a RangeError if not found.
set dbType(int value) {
_ensureStableEnumValues();
type = TypeEnum.values[value];
}
void _ensureStableEnumValues() {
assert(TypeEnum.one.index == 0);
assert(TypeEnum.two.index == 1);
assert(TypeEnum.three.index == 2);
}
}

上一个代码导致此错误(运行此命令dart run build_runner build:之后


[WARNING] objectbox_generator:resolver on lib/entity/method.dart:
skipping property 'type' in entity 'Method', as it has an unsupported type: 'TypeEnum'
[WARNING] objectbox_generator:generator on lib/$lib$:
Creating model: lib/objectbox-model.json
[SEVERE] objectbox_generator:generator on lib/$lib$:
Cannot use the default constructor of 'Method': don't know how to initialize param method - no such property.

我想通过构造函数参数给定一个类型来构造方法。怎么了?

如果我删除构造函数,我应该在类型字段前面添加后期标识符。我不想这么做。可能吧,我不明白。我没有找到任何例子。


我的解决方案:

方法.dart

@Entity()
class Method {
/// ObjectBox 64-bit integer ID property, mandatory.
int id = 0;
/// Custom Type. 
late TypeEnum type;
/// Constructor.
Method(int dbType){
this.dbType = dbType;
}
/// Define a field with a supported type, that is backed by the state field.
int get dbType {
_ensureStableEnumValues();
return type.index;
}
/// Setter of Custom type. Throws a RangeError if not found.
set dbType(int value) {
_ensureStableEnumValues();
type = TypeEnum.values[value];
}
}

若要使ObjectBox能够构造从数据库读取的对象,实体必须具有默认构造函数或参数名称与属性匹配的构造函数。

例如,在这种情况下,要获得默认构造函数,请使参数可选并提供默认值:

Method({this.type = TypeEnum.one});

或者添加一个默认构造函数,使需要类型的构造函数成为命名构造函数:

Method() : type = TypeEnum.one;
Method.type(this.type);

最新更新