Reputation: 944
Future getImage(ImageSource imageSource) async {
var image = await ImagePicker.pickImage(source: imageSource);
setState(() {
_image = image;
});
}
Upvotes: 3
Views: 9398
Reputation: 37
ImagePicker()
.pickImage(source: ImageSource.gallery)
.then((imgFile) async {
file = io.File(imgFile!.path.toString());
imageUrl =
Utility.base64String(await imgFile.readAsBytes());
}
After pic image store in to string
SQFLITE CREATE TABLE QUERY
await db.execute(
'CREATE TABLE $TABLE ($ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, $NAME TEXT, $PRIORITY INTEGER, $PHOTO TEXT)');
Insert Query
Future<SqfLiteModel> save(SqfLiteModel model) async
{
var dbClient = await db;
await dbClient!.insert(TABLE, model.toMap()).then((value) => {});
return model;
}
SqfLiteModel(
id,
{required this.name,
required this.priority,
required this.photo}
);
Upvotes: 0
Reputation: 944
I got the solution in my question. I'm getting the image from an image_picker and Encode it to BASE64 string value like below
Uint8List _bytesImage;
File _image;
String base64Image;
Future getImage() async {
var image2 = await ImagePicker.pickImage(
source: ImageSource.gallery,
);
List<int> imageBytes = image2.readAsBytesSync();
print(imageBytes);
base64Image = base64Encode(imageBytes);
print('string is');
print(base64Image);
print("You selected gallery image : " + image2.path);
_bytesImage = Base64Decoder().convert(base64Image);
setState(() {
_image=image2;
});
}
after creating an SQLite database dbhelper.dart
file to retrieve String values and database model file Image.dart
for the get and set the String values.
image.dart
class Image{
int id;
String image;
Employee(this.id, this.image);
Employee.fromMap(Map map) {
id= map[id];
image = map[image];
}
}
save into database
dbhelper.dart
class DBHelper {
static Database _db;
Future<Database> get db async {
if (_db != null) return _db;
_db = await initDb();
return _db;
}
initDb() async {
io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, "test.db");
var theDb = await openDatabase(path, version: 1, onCreate: _onCreate);
return theDb;
}
void _onCreate(Database db, int version) async {
// When creating the db, create the table
await db.execute(
"CREATE TABLE Imagedata(id INTEGER PRIMARY KEY, image TEXT)");
print("Created tables");
}
void saveImage(Imagedata imagedata) async {
var dbClient = await db;
await dbClient.transaction((txn) async {
return await txn.rawInsert(
'INSERT INTO Imagedata(id, image) VALUES(' +
'\'' +
imagedata.id+
'\'' +
',' +
'\'' +
imagedata.image +
'\'' +
')');
});
}
Future<List<Imagedata>> getMyImage() async {
var dbClient = await db;
List<Map> list = await dbClient.rawQuery('SELECT * FROM Imagedata');
List<Imagedata> images= new List();
for (int i = 0; i < list.length; i++) {
images.add(new Imagedata(list[i]["id"], list[i]["image"]));
}
print(images.length);
return images;
}
Future<int> deleteMyImage(Imagedata imagedata) async {
var dbClient = await db;
int res =
await dbClient.rawDelete('DELETE * FROM Imagedata');
return res;
}
}
Upvotes: 3
Reputation: 1050
You can convert the image to byte array and save it sqlite as a blob.
var image = await ImagePicker.pickImage(source: imageSource);
List<int> bytes = await image.readAsBytes();
//save to SQLite as a blob
Upvotes: 7