slrpg-app/lib/src/shared/data/remote/pb_auth_store.dart

57 lines
1.5 KiB
Dart

import 'dart:convert';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:pocketbase/pocketbase.dart';
class PbAuthStore extends AuthStore {
final FlutterSecureStorage _storage;
final String _saveKey = 'pb_auth';
PbAuthStore({FlutterSecureStorage? storage})
: _storage = storage ??
const FlutterSecureStorage(
aOptions: AndroidOptions(encryptedSharedPreferences: true),
);
@override
Future<void> save(String token, dynamic model) async {
super.save(token, model);
final encoded = jsonEncode(<String, dynamic>{
'token': token,
'model': model,
});
await _storage.write(key: _saveKey, value: encoded);
}
@override
Future<void> clear() async {
super.clear();
await _storage.delete(key: _saveKey);
}
Future<void> loadFromStorage() async {
final raw = await _storage.read(key: _saveKey);
if (raw != null && raw.isNotEmpty) {
try {
final decoded = jsonDecode(raw);
final token = decoded['token'] as String? ?? '';
final modelData = decoded['model'];
dynamic model;
if (modelData is Map<String, dynamic>) {
if (modelData.containsKey('collectionId')) {
model = RecordModel.fromJson(modelData);
} else {
model = RecordModel.fromJson(modelData);
// model = AdminModel.fromJson(modelData);
}
}
super.save(token, model);
} catch (e) {
await clear();
}
}
}
}