feat(proj): init
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// Persisted session: JWT, API address and the cached user profile.
|
||||
abstract interface class SessionStorage {
|
||||
Future<Map<String, String?>> readAll();
|
||||
|
||||
Future<void> write({
|
||||
required String token,
|
||||
required String baseUrl,
|
||||
required String user,
|
||||
});
|
||||
|
||||
Future<void> clear();
|
||||
}
|
||||
|
||||
class PrefsSessionStorage implements SessionStorage {
|
||||
const PrefsSessionStorage();
|
||||
|
||||
static const _tokenKey = 'ppm_token';
|
||||
static const _baseUrlKey = 'ppm_base_url';
|
||||
static const _userKey = 'ppm_user';
|
||||
|
||||
@override
|
||||
Future<Map<String, String?>> readAll() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
return {
|
||||
'token': prefs.getString(_tokenKey),
|
||||
'baseUrl': prefs.getString(_baseUrlKey),
|
||||
'user': prefs.getString(_userKey),
|
||||
};
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> write({
|
||||
required String token,
|
||||
required String baseUrl,
|
||||
required String user,
|
||||
}) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_tokenKey, token);
|
||||
await prefs.setString(_baseUrlKey, baseUrl);
|
||||
await prefs.setString(_userKey, user);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> clear() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove(_tokenKey);
|
||||
await prefs.remove(_baseUrlKey);
|
||||
await prefs.remove(_userKey);
|
||||
}
|
||||
}
|
||||
|
||||
/// Used by tests and previews — no platform channels involved.
|
||||
class InMemorySessionStorage implements SessionStorage {
|
||||
InMemorySessionStorage([Map<String, String?>? initial])
|
||||
: _values = {...?initial};
|
||||
|
||||
final Map<String, String?> _values;
|
||||
|
||||
@override
|
||||
Future<Map<String, String?>> readAll() async => Map.of(_values);
|
||||
|
||||
@override
|
||||
Future<void> write({
|
||||
required String token,
|
||||
required String baseUrl,
|
||||
required String user,
|
||||
}) async {
|
||||
_values
|
||||
..['token'] = token
|
||||
..['baseUrl'] = baseUrl
|
||||
..['user'] = user;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> clear() async => _values.clear();
|
||||
}
|
||||
Reference in New Issue
Block a user