Files
Stocky/lib/services/local/StorageService.dart

107 lines
2.8 KiB
Dart

// lib/services/local/local_storage_service.dart
import 'package:Stocky/models/task_adapter.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
class LocalStorageService extends GetxService {
static final LocalStorageService _instance = LocalStorageService._internal();
late Box _settBox;
late Box<Task> _tasksBox;
late Box _docsBox;
LocalStorageService._internal();
factory LocalStorageService() => _instance;
Box get settingsBox => _settBox;
Box<Task> get tasksBox => _tasksBox;
Box get docsBox => _docsBox;
List<Task> getTasks() {
return tasksBox.values.toList();
}
Future<List<Task>> getCompletedTasks() async {
return tasksBox.values.where((task) => !task.isCompleted).toList();
}
Future<void> putNumber(String number) async {
await settingsBox.put('number', number);
}
Future<String> getNumber() async {
return settingsBox.get('number');
}
Future<void> putUsername(String name) async {
await settingsBox.put('username', name);
}
Future<String> getUsername() async {
return settingsBox.get('username', defaultValue: 'john doe');
}
Future<void> saveTasks(List<Task> tasks) async {
await tasksBox.clear();
for (final task in tasks) {
await tasksBox.put(task.id.toString(), task);
}
}
Future<void> addTask(Task task) async {
await tasksBox.put(task.id.toString(), task);
}
Future<void> updateTask(Task task) async {
await tasksBox.put(task.id.toString(), task);
}
Future<void> replaceTask(String oldId, Task newTask) async {
await tasksBox.delete(oldId);
await tasksBox.put(newTask.id.toString(), newTask);
}
Future<void> removeTask(dynamic taskId) async {
await tasksBox.delete(taskId.toString());
}
// --- Токены ---
Future<void> saveAccessToken(String token) async {
await settingsBox.put('access_token', token);
}
Future<void> clearAuth() async {
await settingsBox.delete('access_token');
}
Future<void> saveFcmToken(String token) async {
await settingsBox.put('fcm_token', token);
}
String? getAccessToken() => settingsBox.get('access_token');
String? getFcmToken() => settingsBox.get('fcm_token');
static Future<LocalStorageService> init() async {
await Hive.initFlutter();
Hive.registerAdapter(TaskAdapter());
Hive.registerAdapter(SubtaskAdapter());
// Открываем боксы
await Hive.openBox('settings');
await Hive.openBox<Task>('tasks');
await Hive.openBox('docs');
// Теперь можно безопасно получить ссылки
final service = _instance;
service._settBox = Hive.box('settings');
service._tasksBox = Hive.box<Task>('tasks');
service._docsBox = Hive.box('docs');
Get.put(service, permanent: true);
return service;
}
}