feat(proj): init

This commit is contained in:
vl.arkhangelskii
2026-09-21 04:06:43 +03:00
commit c956b94983
1076 changed files with 50876 additions and 0 deletions
@@ -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();
}