【发布时间】:2020-07-06 13:11:23
【问题描述】:
我有一个简单的表格,我想通过 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 class,而不是小部件。
我已经找到the topic,在 Image widget 和 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。
【问题讨论】:
-
您不会使用instantiateImageCodec 创建一个编解码器,等待getNextFrame,然后从中提取图像吗?请注意,要做到这一点,您需要确保将图像字节编码为 PNG 以保留几何等内容。 getBytes 从何而来? image有这种方法吗?
-
您能提供一个关于您的提案的代码 sn-p 吗?是的,
getBytes来自Image class -
我只看到
toByteData。你能提供一个显示这种其他方法的链接吗? -
你是这个意思吗? pub.dev/documentation/image/latest/image/Image/getBytes.html 来自另一个 Image 类,而不是您提供链接的那个。
-
是的,我的错,你的链接是正确的。
标签: flutter flutter-moor