I have sqlite db file and I want to import it to flutter desktop app project using drift database, i succeeded to make it work in sqflite library but I couldn't make it work in windows I don't know why so I decided to use dirft instead but it's just won't work I am new to flutter and programming in general.
her is my code for importing db file from assets that works in sqflite
import 'dart:typed_data';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sqflite_common/sqlite_api.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
class DatabaseHelper{
initialDb()async {
var databasesPath= await databaseFactoryFfi.getDatabasesPath();
var path = join(databasesPath, "main_table.db");
var exists= await databaseFactoryFfi.databaseExists(path);
if(!exists){
print("create new copy form assets");
try {
await Directory(dirname(path)).create(recursive: true);
} catch (_) {}
ByteData data = await rootBundle.load(join('assets','main_table_data_table.db'));
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(path).writeAsBytes(bytes, flush: true);
} else {
print("Opening existing database");
}
var db= await databaseFactoryFfi.openDatabase(path);
}
}
below is the code in drift that does not work.
import 'package:drift/backends.dart';
import 'package:drift/drift.dart';
import 'dart:io';
import 'package:drift/native.dart';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
part 'database_model.g.dart';
class MyDatabase extends _$MyDatabase {
MyDatabase() : super(_openConnection());
@override
int get schemaVersion => 1;
}
LazyDatabase _openConnection() {
return LazyDatabase(() async {
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'main_table.db'));
if (!await file.exists()) {
final data =
await rootBundle.load(p.join('assets', 'main_table_data_table.db'));
final buffer = data.buffer;
await file.writeAsBytes(
buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}
return NativeDatabase.createInBackground(file);
});
}
trying to import database file from assets using flutter and make query for search to show all records in that file