I\'m building a Flutter app where I would like to keep the data offline.
I\'m capturing an image using the camera or gallery image picker and able to store that image i
Image
s and, in general, files, are meant to be stored as BLOB
in a SQLite
database.
To do so:
Picture
class: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 toMap() => {
"id": id,
"title": title,
"picture" : picture,
};
}
await db.execute("CREATE TABLE Picture(id INTEGER PRIMARY KEY, title TEXT, picture BLOB )");
Picture
in the DB:void savePicture(Picture picture) async {
var dbClient = await db;
await dbClient.insert("Picture", picture.toMap());
}
Picture
s from the DB:Future> getPictures() async {
var dbClient = await db;
List
Picture
to the DB: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);
Image.memory(picture.picture);
NB: While in the example above we used an Image
, this concept applies well with any other kinds of files.
Converting a file to base64
and store it as a string works, but it's not the best solution. One issue is an increase of the storage requirements by 33%, that adds up quickly especially when dealing with large files.