db_connector_io.dart 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import 'dart:io';
  2. import 'package:drift/native.dart';
  3. import 'package:drift/drift.dart';
  4. import 'package:path/path.dart' as p;
  5. import 'package:path_provider/path_provider.dart';
  6. import 'package:flutter/services.dart' show rootBundle;
  7. import '../core/constants.dart';
  8. QueryExecutor createDb(String dirPath, String dbName) {
  9. return NativeDatabase(
  10. File(p.join(dirPath, dbName)),
  11. logStatements: true,
  12. );
  13. }
  14. Future<String> ensureDbReady() async {
  15. final dir = await getApplicationDocumentsDirectory();
  16. final dbFile = File(p.join(dir.path, AppConstants.kDbName));
  17. if (!await dbFile.exists()) {
  18. try {
  19. final data = await rootBundle.load(AppConstants.kAssetsDbPath);
  20. await dbFile.create(recursive: true);
  21. await dbFile.writeAsBytes(data.buffer.asUint8List());
  22. } catch (_) {
  23. // No seed DB in assets, will create empty
  24. }
  25. }
  26. return dir.path;
  27. }
  28. Future<bool> isDatabaseEmpty(String dirPath) async {
  29. final dbFile = File(p.join(dirPath, AppConstants.kDbName));
  30. if (!await dbFile.exists()) return true;
  31. final stat = await dbFile.stat();
  32. return stat.size < 1024;
  33. }