db_connector_io.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'dart:io';
  2. import 'dart:developer' as dev;
  3. import 'package:drift/native.dart';
  4. import 'package:drift/drift.dart';
  5. import 'package:path/path.dart' as p;
  6. import 'package:path_provider/path_provider.dart';
  7. import 'package:flutter/services.dart' show rootBundle;
  8. import '../core/constants.dart';
  9. QueryExecutor createDb(String dirPath, String dbName) {
  10. return NativeDatabase(
  11. File(p.join(dirPath, dbName)),
  12. logStatements: true,
  13. );
  14. }
  15. Future<String> ensureDbReady() async {
  16. String dirPath;
  17. if (Platform.isAndroid) {
  18. final extDir = Directory(AppConstants.kAndroidDbDir);
  19. if (!await extDir.exists()) {
  20. await extDir.create(recursive: true);
  21. }
  22. dirPath = extDir.path;
  23. } else {
  24. final dir = await getApplicationDocumentsDirectory();
  25. dirPath = dir.path;
  26. }
  27. final dbFile = File(p.join(dirPath, AppConstants.kDbName));
  28. if (!await dbFile.exists()) {
  29. try {
  30. final data = await rootBundle.load(AppConstants.kAssetsDbPath);
  31. await dbFile.create(recursive: true);
  32. await dbFile.writeAsBytes(data.buffer.asUint8List());
  33. } catch (e) {
  34. dev.log('Errore copia seed DB: $e');
  35. }
  36. }
  37. if (!await dbFile.exists()) {
  38. throw Exception(
  39. 'Impossibile creare il file database in $dirPath',
  40. );
  41. }
  42. return dirPath;
  43. }
  44. Future<bool> isDatabaseEmpty(String dirPath) async {
  45. final dbFile = File(p.join(dirPath, AppConstants.kDbName));
  46. if (!await dbFile.exists()) return true;
  47. final stat = await dbFile.stat();
  48. return stat.size < 1024;
  49. }