57 lines
1.5 KiB
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();
|
|
}
|
|
}
|
|
}
|
|
}
|