Files
OpenParcelBox/mobile-app/app/lib/secure_box_store.dart
T
2026-07-16 17:36:28 +02:00

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);
}