import 'package:shared_preferences/shared_preferences.dart'; import 'package:pocketbase/pocketbase.dart'; /// Abstract contract for authentication persistence. /// Implement this to use different storage solutions (e.g., Hive, SecureStorage). abstract class AuthPersistence { Future saveAuthData(String data); Future loadAuthData(); Future clearAuthData(); } /// SharedPreferences implementation of [AuthPersistence]. class SharedPrefsAuthPersistence implements AuthPersistence { final SharedPreferences _prefs; static const String _kAuthKey = 'pb_auth_token'; SharedPrefsAuthPersistence(this._prefs); @override Future saveAuthData(String data) async { await _prefs.setString(_kAuthKey, data); } @override Future loadAuthData() async { return _prefs.getString(_kAuthKey); } @override Future clearAuthData() async { await _prefs.remove(_kAuthKey); } } /// The custom AuthStore that connects PocketBase to any [AuthPersistence] implementation. class PersistentAuthStore extends AsyncAuthStore { PersistentAuthStore({required AuthPersistence persistence, super.initial}) : super( save: (String data) => persistence.saveAuthData(data), clear: () => persistence.clearAuthData(), ); }