Shadeeka Nimesh
Shadeeka Nimesh

Reputation: 944

How to upload a image to sqlite database in flutter using image_picker dependency

Future getImage(ImageSource imageSource) async {
    var image = await ImagePicker.pickImage(source: imageSource);

    setState(() {
      _image = image;
    });
  } 

Upvotes: 3

Views: 9398

Answers (3)

MustaqAhmed Saiyed
MustaqAhmed Saiyed

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

Shadeeka Nimesh
Shadeeka Nimesh

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

Arsen Ghazaryan
Arsen Ghazaryan

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

Related Questions