import 'package:hub/shared/helpers/secure_storage_helper.dart'; import 'package:hub/shared/helpers/shared_preferences_storage_helper.dart'; import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/cache_util.dart'; abstract class Storage { Future set(String key, dynamic value); Future get(String key); Future delete(String key); } class StorageData { final String key; final dynamic value; final StorageType type; StorageData(this.key, this.value, this.type); } enum StorageType { SecureStorage, SharedPreferences, SQLite3 } class StorageManager { final SecureStorageHelper _secureStorage = SecureStorageHelper(); final SharedPreferencesStorageHelper _sharedPreferences = SharedPreferencesStorageHelper(); final SQLiteStorageHelper _sqliteStorage = SQLiteStorageHelper(); Future set(StorageData data) async { switch (data.type) { case StorageType.SecureStorage: CacheUtil.set(data.key, data.value); await _secureStorage.set(data.key, data.value); break; case StorageType.SharedPreferences: await _sharedPreferences.set(data.key, data.value); break; case StorageType.SQLite3: await _sqliteStorage.set(data.key, data.value); break; } } Future get(StorageData data) async { var value = CacheUtil.get(data.key); if (value == null) { switch (data.type) { case StorageType.SecureStorage: value = await _secureStorage.get(data.key); break; case StorageType.SharedPreferences: value = await _sharedPreferences.get(data.key); break; case StorageType.SQLite3: value = await _sqliteStorage.get(data.key); break; } CacheUtil.set(data.key, value); } return value; } Future delete(StorageData data) async { switch (data.type) { case StorageType.SecureStorage: CacheUtil.delete(data.key); await _secureStorage.delete(data.key); break; case StorageType.SharedPreferences: await _sharedPreferences.delete(data.key); break; case StorageType.SQLite3: await _sqliteStorage.delete(data.key); break; } } } class StorageUtil {}