Enhance video playback cubit resilience and K-12 curriculum flow
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../utils/app_logger.dart';
|
||||
|
||||
/// Ultra-Resilient Storage Service for Admin App
|
||||
class StorageService {
|
||||
final FlutterSecureStorage _secureStorage;
|
||||
|
||||
StorageService({FlutterSecureStorage? secureStorage})
|
||||
: _secureStorage = secureStorage ??
|
||||
const FlutterSecureStorage(
|
||||
mOptions: MacOsOptions(
|
||||
accessibility: KeychainAccessibility.first_unlock,
|
||||
),
|
||||
aOptions: AndroidOptions(
|
||||
encryptedSharedPreferences: true,
|
||||
),
|
||||
);
|
||||
|
||||
static const String _keyToken = 'saqel_admin_jwt_token';
|
||||
static const String _keyUser = 'saqel_admin_user_data';
|
||||
|
||||
Future<void> _writeSafe(String key, String value) async {
|
||||
try {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(key, value);
|
||||
} catch (e) {
|
||||
AppLogger.log('Prefs write notice ($key): $e', tag: 'STORAGE');
|
||||
}
|
||||
|
||||
try {
|
||||
await _secureStorage.write(key: key, value: value);
|
||||
} on PlatformException catch (e) {
|
||||
AppLogger.log('Keychain notice ($key): ${e.message}', tag: 'STORAGE');
|
||||
} catch (_) {}
|
||||
}
|
||||
|
||||
Future<String?> _readSafe(String key) async {
|
||||
try {
|
||||
final val = await _secureStorage.read(key: key);
|
||||
if (val != null && val.isNotEmpty) return val;
|
||||
} catch (_) {}
|
||||
|
||||
try {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
return prefs.getString(key);
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> saveToken(String token) async => await _writeSafe(_keyToken, token);
|
||||
Future<String?> getToken() async => await _readSafe(_keyToken);
|
||||
|
||||
Future<void> clearSession() async {
|
||||
try {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove(_keyToken);
|
||||
await prefs.remove(_keyUser);
|
||||
} catch (_) {}
|
||||
try {
|
||||
await _secureStorage.delete(key: _keyToken);
|
||||
await _secureStorage.delete(key: _keyUser);
|
||||
} catch (_) {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user