import db file from assets using drift/moor in flutter

616 Views Asked by At

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

0

There are 0 best solutions below