如何为Dart Floor的Type Converter建立继承层次结构



如下所述,我定义ListConverter<T>以形成继承层次结构。

abstract class ListConverter<T> extends TypeConverter<List<T>, String> {
static const delimiter = "!DELIMITER!";
T fromDB(String databaseValue);
String toDB(T value);
@override
List<T> decode(String databaseValue) {
return databaseValue
.split(delimiter)
.where((element) => element.isNotEmpty)
.map((e) => fromDB(e))
.toList();
}
@override
String encode(List<T> value) {
return value.map((e) => toDB(e)).join(delimiter);
}
}

使用ListConverter<T>实现了IntListConverter

class IntListConverter extends ListConverter<int> {
@override
int fromDB(String databaseValue) {
return int.parse(databaseValue);
}
@override
String toDB(int value) {
return value.toString();
}
}

我的计划是在StringListConverter等上也使用ListConverter<T>。但不幸的是,我在运行floor_generator时收到了此错误消息。

[SERVERE]floor_generator:lib/persistence/db/app_database.dart上的floor_gnerator:只有从TypeConverter继承的类才能用作类型转换器。请确保使用从TypeConverter继承的类。

我知道层次结构(B)工作得很好,但我想构建(A)结构来管理其他列表转换器。

  • (A)TypeConverter -> ListConverter -> IntListConverter
  • (B)TypeConverter -> IntListConverter

如何为Dart Floor的Type Converter创建继承层次结构

我以迂回的方式解决了这个问题。我使用mixin关键字而不是直接继承。

class IntListConverter extends TypeConverter<List<int>, String>
with ListConverter<int> {
@override
int fromDB(String databaseValue) {
return int.parse(databaseValue);
}
@override
String toDB(int value) {
return value.toString();
}
}