abstract class TokenStorage { Future getAccessToken(); Future getRefreshToken(); Future saveTokens({required String access, required String refresh}); Future clear(); } class SecureTokenStorage implements TokenStorage { static const _accessTokenKey = 'access_token'; static const _refreshTokenKey = 'refresh_token'; final dynamic _storage; SecureTokenStorage([this._storage]); @override Future getAccessToken() async { return _storage?.read(key: _accessTokenKey); } @override Future getRefreshToken() async { return _storage?.read(key: _refreshTokenKey); } @override Future saveTokens({ required String access, required String refresh, }) async { await _storage?.write(key: _accessTokenKey, value: access); await _storage?.write(key: _refreshTokenKey, value: refresh); } @override Future clear() async { await _storage?.delete(key: _accessTokenKey); await _storage?.delete(key: _refreshTokenKey); } }