import 'package:flutter/cupertino.dart'; import 'package:hub/shared/helpers/storage/base_storage.dart'; import 'package:hub/shared/helpers/storage/keychain_storage.dart'; import 'package:hub/shared/helpers/storage/secure_storage.dart'; import 'package:hub/shared/helpers/storage/shared_preferences_storage.dart'; class StorageHelper { static final StorageHelper _instance = StorageHelper._internal(); factory StorageHelper() => _instance; StorageHelper._internal(); late BuildContext? _context; BuildContext? get context => _context; set context(BuildContext? context) => _context = context; late bool _isRecovered = false; bool get isRecovered => _isRecovered; set isRecovered(bool isRecovered) => _isRecovered = isRecovered; Future init() async { await SecureStorage.instance.init(); await SharedPreferencesStorage.instance.init(); await KeychainHelper.instance.init(); String? isFirstRun = await SharedPreferencesStorage.instance .get(SharedPreferencesKey.isFirstRun.value); if (isFirstRun != 'false') { await SharedPreferencesStorage.instance .set(SharedPreferencesKey.isFirstRun.value, false); await SecureStorage.instance.set(SecureStorageKey.isLogged.value, false); } } static BaseStorage getInstance(Storage storage) { switch (storage) { case Storage.secureStorage: return SecureStorage.instance; case Storage.sharedPreferences: return SharedPreferencesStorage.instance; default: return KeychainHelper.instance; } } static BaseStorage getInstanceByKey(String key) { if (SecureStorageKey.values.map((e) => e.value).toList().contains(key)) { return SecureStorage.instance; } else if (SharedPreferencesKey.values .map((e) => e.value) .toList() .contains(key)) { return SharedPreferencesStorage.instance; } else { return KeychainHelper.instance; } } Future g(String key) async { return await getInstanceByKey(key).get(key); } Future s(String key, T value) async { return await getInstanceByKey(key).set(key, value); } Future d(String key) async { return await getInstanceByKey(key).delete(key); } Future c(Storage storage) async { return await getInstance(storage).clearAll(); } }