Files
lab-app/lib/core/api/pocketbase_client.dart
T
2026-06-12 00:04:53 +03:00

68 lines
1.8 KiB
Dart

import 'dart:convert';
import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart';
const _kAuthKey = 'pb_auth';
const _kRememberSessionKey = 'remember_session';
class PocketBaseClient {
PocketBaseClient._({
required this.pb,
required SharedPreferences prefs,
required bool rememberSession,
}) : _prefs = prefs,
_rememberSession = rememberSession;
static PocketBaseClient? _instance;
static PocketBaseClient get instance => _instance!;
final PocketBase pb;
final SharedPreferences _prefs;
bool _rememberSession;
bool get rememberSession => _rememberSession;
static Future<void> init() async {
final prefs = await SharedPreferences.getInstance();
final remember = prefs.getBool(_kRememberSessionKey) ?? true;
final stored = prefs.getString(_kAuthKey);
final store = AsyncAuthStore(
save: (String data) async {
final client = _instance;
if (client == null || client._rememberSession) {
await prefs.setString(_kAuthKey, data);
return;
}
await prefs.remove(_kAuthKey);
},
initial: remember ? stored : null,
);
_instance = PocketBaseClient._(
pb: PocketBase('https://pocket.kovaksoft.com', authStore: store),
prefs: prefs,
rememberSession: remember,
);
if (!remember && stored != null) {
await prefs.remove(_kAuthKey);
}
}
Future<void> setRememberSession(bool value) async {
_rememberSession = value;
await _prefs.setBool(_kRememberSessionKey, value);
if (!value) {
await _prefs.remove(_kAuthKey);
} else if (pb.authStore.isValid) {
await _prefs.setString(
_kAuthKey,
jsonEncode({
'token': pb.authStore.token,
'model': pb.authStore.record,
}),
);
}
}
}