我有一个简单的表,我想通过MOOR创建和维护它。下面是表定义:
class Plants extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text()();
TextColumn get image => text().map(const ImageConverter()).nullable()();
}
如您所见,我有一个image
字段,我想Image
用于base64
转换和返回。请注意,我指的是 Flutter Image 类,而不是小部件。我已经找到了在Image 小部件和base64之间进行转换的主题,但从架构的角度来看,在数据层上使用小部件似乎并不正确。这是我到目前为止所做的:
import 'package:image/image.dart';
import 'dart:convert';
import 'dart:typed_data';
import 'package:moor/moor.dart';
class ImageConverter extends TypeConverter<Image, String> {
Image _imageFromBase64String(String base64String) {
return null; // <--- missing implementation
}
Uint8List _dataFromBase64String(String base64String) {
return base64Decode(base64String);
}
String _base64String(Uint8List data) {
return base64Encode(data);
}
const ImageConverter();
@override
Image mapToDart(String fromDb) {
if (fromDb == null) {
return null;
}
return _imageFromBase64String(fromDb);
}
@override
String mapToSql(Image value) {
if (value == null) {
return null;
}
return _base64String(value.getBytes());
}
}
正如你所看到的,我没有问题(我猜)实现Image
转换base64
,但是我很难base64
实现Image
.