diff --git a/lib/shared/helpers/database_storage.dart b/lib/shared/helpers/database_storage.dart index 5d981a64..e46b21bb 100644 --- a/lib/shared/helpers/database_storage.dart +++ b/lib/shared/helpers/database_storage.dart @@ -15,8 +15,13 @@ class DatabaseStorage implements BaseStorage { factory DatabaseStorage() => instance; DatabaseStorage._internal(); - static late final Database _database; - static Database get database => _database; + static Database? _database; + static Database get database { + if (_database == null) { + throw Exception('Database has not been initialized. Call init() first.'); + } + return _database!; + } static BaseStorage getInstanceByKey(String key) { if (KeychainStorageKey.values.map((e) => e.value).toList().contains(key)) { @@ -29,6 +34,7 @@ class DatabaseStorage implements BaseStorage { } Future init() async { + if (_database != null && _database!.isOpen) return; _database = await openDatabase( join(await getDatabasesPath(), _dbName), version: _dbVersion, @@ -42,14 +48,14 @@ class DatabaseStorage implements BaseStorage { log('Creating database...'); await database.execute(KeychainDelegate.createTableQuery); await database.execute(LicenseDelegate.createTableQuery); - await LicenseService.setupLicense(); + await LicenseService.setupLicense(database); } Future _onUpgrade(Database database, int oldVersion, int newVersion) async { log('Upgrading database from version $oldVersion to $newVersion...'); if (oldVersion < 2) { await database.execute(LicenseDelegate.createTableQuery); - await LicenseService.setupLicense(); + await LicenseService.setupLicense(database); } } @@ -57,8 +63,8 @@ class DatabaseStorage implements BaseStorage { @override Future clearAll() async { - await _database.delete(KeychainDelegate.tableKeychain); - await _database.delete(LicenseDelegate.tableLicense); + await _database?.delete(KeychainDelegate.tableKeychain); + await _database?.delete(LicenseDelegate.tableLicense); return; } @@ -76,4 +82,4 @@ class DatabaseStorage implements BaseStorage { Future set(String key, T value) async { return await getInstanceByKey(key).set(key, value); } -} +} \ No newline at end of file diff --git a/lib/shared/services/license/license_service.dart b/lib/shared/services/license/license_service.dart index 079751a8..49851806 100644 --- a/lib/shared/services/license/license_service.dart +++ b/lib/shared/services/license/license_service.dart @@ -16,10 +16,10 @@ class LicenseService { factory LicenseService() => _instance; LicenseService._internal(); - static Future setupLicense() async { + static Future setupLicense(Database database) async { log('All modules are visible'); for (var element in LicenseStorageKey.values.map((e) => e.value)) { - await DatabaseStorage.database.insert( + await database.insert( LicenseDelegate.tableLicense, { 'key': element, @@ -69,7 +69,7 @@ class LicenseService { } if (responseBody == []) { - await setupLicense(); + await setupLicense(DatabaseStorage.database); return true; } @@ -80,7 +80,7 @@ class LicenseService { } return true; } catch (e) { - await setupLicense(); + await setupLicense(DatabaseStorage.database); return true; } }