52 lines
1.5 KiB
Dart
52 lines
1.5 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
|
|
import 'models.dart';
|
|
|
|
class SecureBoxStore {
|
|
SecureBoxStore({FlutterSecureStorage? storage})
|
|
: _storage = storage ?? const FlutterSecureStorage();
|
|
|
|
static const _boxesKey = 'opb.saved-boxes.v2';
|
|
static const _languageKey = 'opb.language';
|
|
static const _backupDirectoryKey = 'opb.backup-directory';
|
|
final FlutterSecureStorage _storage;
|
|
|
|
Future<List<SavedBox>> loadBoxes() async {
|
|
final raw = await _storage.read(key: _boxesKey);
|
|
if (raw == null || raw.isEmpty) {
|
|
return <SavedBox>[];
|
|
}
|
|
final decoded = jsonDecode(raw);
|
|
if (decoded is! List<Object?>) {
|
|
return <SavedBox>[];
|
|
}
|
|
return decoded
|
|
.whereType<Map<String, dynamic>>()
|
|
.map((item) => SavedBox.fromJson(item.cast<String, Object?>()))
|
|
.toList();
|
|
}
|
|
|
|
Future<void> saveBoxes(List<SavedBox> boxes) => _storage.write(
|
|
key: _boxesKey,
|
|
value: jsonEncode(boxes.map((box) => box.toJson()).toList()),
|
|
);
|
|
|
|
Future<String?> loadLanguage() => _storage.read(key: _languageKey);
|
|
|
|
Future<void> saveLanguage(String? language) async {
|
|
if (language == null) {
|
|
await _storage.delete(key: _languageKey);
|
|
} else {
|
|
await _storage.write(key: _languageKey, value: language);
|
|
}
|
|
}
|
|
|
|
Future<String?> loadBackupDirectory() =>
|
|
_storage.read(key: _backupDirectoryKey);
|
|
|
|
Future<void> saveBackupDirectory(String path) =>
|
|
_storage.write(key: _backupDirectoryKey, value: path);
|
|
}
|