import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'secure_storage.g.dart'; @riverpod Future secureStorage(Ref ref) => SecureStorage.getInstance(keys: {'token'}); class SecureStorage { SecureStorage._(this._flutterSecureStorage, this._cache); late final FlutterSecureStorage _flutterSecureStorage; late final Map _cache; static Future getInstance({required Set keys}) async { const flutterSecureStorage = FlutterSecureStorage(); final cache = {}; await keys .map((key) => flutterSecureStorage.read(key: key).then((value) { if (value != null) { cache[key] = value; } })) .wait; return SecureStorage._(flutterSecureStorage, cache); } String? get(String key) => _cache[key]; Future set(String key, String value) { _cache[key] = value; return _flutterSecureStorage.write(key: key, value: value); } Future remove(String key) { _cache.remove(key); return _flutterSecureStorage.delete(key: key); } }