如下所述,我定义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();
}
}