107 lines
2.8 KiB
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;
|
|
}
|
|
}
|