import 'dart:io'; import 'dart:developer' as dev; import 'package:drift/native.dart'; import 'package:drift/drift.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import 'package:flutter/services.dart' show rootBundle; import '../core/constants.dart'; QueryExecutor createDb(String dirPath, String dbName) { return NativeDatabase( File(p.join(dirPath, dbName)), logStatements: true, ); } Future ensureDbReady() async { String dirPath; if (Platform.isAndroid) { final extDir = Directory(AppConstants.kAndroidDbDir); if (!await extDir.exists()) { await extDir.create(recursive: true); } dirPath = extDir.path; } else { final dir = await getApplicationDocumentsDirectory(); dirPath = dir.path; } final dbFile = File(p.join(dirPath, AppConstants.kDbName)); if (!await dbFile.exists()) { try { final data = await rootBundle.load(AppConstants.kAssetsDbPath); await dbFile.create(recursive: true); await dbFile.writeAsBytes(data.buffer.asUint8List()); } catch (e) { dev.log('Errore copia seed DB: $e'); } } if (!await dbFile.exists()) { throw Exception( 'Impossibile creare il file database in $dirPath', ); } return dirPath; } Future isDatabaseEmpty(String dirPath) async { final dbFile = File(p.join(dirPath, AppConstants.kDbName)); if (!await dbFile.exists()) return true; final stat = await dbFile.stat(); return stat.size < 1024; }