Не удается создать базу данных. Нет БД в проводнике файлов устройства

#sqlite #flutter #relational-database

#sqlite #флаттер #реляционная база данных

Вопрос:

Я пытаюсь создать небольшой проект в Flutter, где я добавляю некоторые данные в форму вместе с несколькими изображениями в базе данных sqflite, но я не могу понять, почему именно мой код не работает.

Вот мой класс db_helper

     Future<Database> get db async {
    if (_db != null)
      return _db;
    _db = await initDb();
    return _db;
  }

  //Creating a database with name test.dn in your directory
  initDb() async {
    io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, "products.db");
    var theDb = await openDatabase(path, version: 1, onCreate: _onCreate);
    return theDb;
  }

  // Creating a table name Employee with fields
  void _onCreate(Database db, int version) async {
    // When creating the db, create the table
    await db.execute(
        """CREATE TABLE product(
        id INTEGER PRIMARY KEY AUTOINCREMENT, 
        name TEXT NOT NULL, 
        brand TEXT NOT NULL, 
        color TEXT NOT NULL, 
        size INTEGER NOT NULL, 
        qty INTEGER NOT NULL)""");

    await db.execute(
        """CREATE TABLE image(
        id INTEGER PRIMARY KEY AUTOINCREMENT, 
        path TEXT, 
        product_id INTEGER,
        FOREIGN KEY(product_id) REFERENCES product (id) 
        ON DELETE NO ACTION ON UPDATE NO ACTION)""");

    debugPrint("Created tables");
  }

  // Get all products
  Future<List<Map<String, dynamic>>> getProducts() async {
    Database db = this.initDb();

    var result = await db.query('product');
    return resu<
    
  }

  // Inser or update image
  Future<product_model.Image> insertImage(product_model.Image image) async {
    // var count = Sqflite.firstIntValue(await _db.rawQuery("SELECT COUNT(*) FROM image WHERE username = ?", [image.id]));
    Database database = await db;

    await database.insert("image", image.toMap(), conflictAlgorithm: ConflictAlgorithm.ignore);

    // await _db.update("image", image.toMap(), where: "id = ?", whereArgs: [image.id]);


    return image;
  }

  // Inser or update product
  Future<product_model.Product> insertProduct(product_model.Product product) async {
    // var count = Sqflite.firstIntValue(await _db.rawQuery("SELECT COUNT(*) FROM product WHERE username = ?", [product.id]));

    Database database = await db;

    await database.insert("product", product.toMap(), conflictAlgorithm: ConflictAlgorithm.ignore);

    // await _db.update("product", product.toMap(), where: "id = ?", whereArgs: [product.id]);

    return product;
  }
  

И здесь я вызываю базу данных:

 void _saveProductWithPictures() async{

db = DBHelper();
// var db = await dbHelper.initDb();

product = db_elements.Product();
imageModels = List<db_elements.Image>();
int resu<

await db.insertProduct(product).whenComplete(() => {
  _nameController.clear(),
  _brandController.clear(),
  _colorController.clear(),
  _sizeController.clear(),
  _qtyController.clear()
});

if (result != 0) {  // Success
  _showAlertDialog('Status', 'Note Saved Successfully');
} else {  // Failure
  _showAlertDialog('Status', 'Problem Saving Note');
}
//save the product

// end save the product

//save the product picture/s
for (var i in _files) imageModels.add(db_elements.Image(path: i.path.toString()));

for (var image in imageModels) await db.insertImage(image).whenComplete(() => {

  _files.clear()

});
//end save the product picture/s
  

}

Я неделями пытался это исправить, но все еще безнадежно. Я не могу сохранить данные в базе данных. Ценю любую помощь. Заранее спасибо

Комментарии:

1. вы пробовали var databasesPath = await getDatabasesPath(); вместо getApplicationDocumentsDirectory . Также вы можете просто обойтись products.db без полного пути. библиотека разрешит правильный путь.

2. вы заставили это работать, у меня такая же проблема, но только с некоторыми устройствами, любая помощь, пожалуйста