Zer*_*ine 15 database sqlite dart flutter
我正在构建一个 Flutter 应用程序,我希望将数据保持在离线状态。
我正在使用相机或图库图像选择器捕获图像,并且能够将该图像存储到File image
变量中。
File _avatarImg;
void _getImage(BuildContext context, ImageSource source) {
ImagePicker.pickImage(
source: source,
maxWidth: 400.0,
maxHeight: 400.0,
).then((File image) {
_avatarImg = image;
});
}
Run Code Online (Sandbox Code Playgroud)
这非常有效,但我的问题是,我将如何存储此图像以保持持久性?我是否应该在图像所在的手机中存储指向本地媒体目录的字符串链接?如果是这样,我会担心图像是否被用户意外删除。或者我是否将图像本身存储到 BLOB 中的数据库中?这方面的最佳做法是什么?
Image
s 和通常的文件,旨在像BLOB
在SQLite
数据库中一样存储。
这样做:
Picture
类:class Picture {
final int id;
final String title;
final Uint8List picture;
Picture({this.id, this.title, this.picture});
Picture.fromMap(Map map) {
id = map[id];
title = map[title];
picture = map[picture];
}
Map<String, dynamic> toMap() => {
"id": id,
"title": title,
"picture" : picture,
};
}
Run Code Online (Sandbox Code Playgroud)
await db.execute("CREATE TABLE Picture(id INTEGER PRIMARY KEY, title TEXT, picture BLOB )");
Run Code Online (Sandbox Code Playgroud)
Picture
在数据库中:void savePicture(Picture picture) async {
var dbClient = await db;
await dbClient.insert("Picture", picture.toMap());
}
Run Code Online (Sandbox Code Playgroud)
Picture
从数据库中获取s的方法:Future<List<Picture>> getPictures() async {
var dbClient = await db;
List<Map> list = await dbClient.rawQuery('SELECT * FROM Picture');
List<Picture> pictures = new List();
for (int i = 0; i < list.length; i++) {
pictures.add(new Picture(list[i]["id"], list[i]["text"], list[i]["picture"]));
}
return pictures;
}
}
Run Code Online (Sandbox Code Playgroud)
Picture
到数据库:var image = await get(
"https://images.pexels.com/photos/2047905/pexels-photo-2047905.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940");
var bytes = image.bodyBytes;
Picture picture = Picture(id, title, picture);
savePicture(picture);
Run Code Online (Sandbox Code Playgroud)
Image.memory(picture.picture);
Run Code Online (Sandbox Code Playgroud)
注意:虽然在上面的示例中我们使用了Image
,但这个概念适用于任何其他类型的文件。
将文件转换base64
为字符串并将其存储为字符串有效,但这不是最佳解决方案。一个问题是存储需求增加了 33%,这会很快增加,尤其是在处理大文件时。
归档时间: |
|
查看次数: |
15546 次 |
最近记录: |