import 'package:flutter/foundation.dart'; import 'package:hive_ce/hive.dart'; import '/models/user.dart'; import '/data/repositories/interfaces/iuser_repository.dart'; /// Сервис для управления текущим пользователем приложения /// Использует ChangeNotifier для уведомления UI об изменениях class UserService extends ChangeNotifier { // Ключ для сохранения ID текущего пользователя в настройках static const String _currentUserKey = 'currentUserId'; late final Box _settingsBox; // Box для хранения настроек final IUserRepository _userRepository; // Репозиторий для работы с пользователями User? _currentUser; // Текущий активный пользователь /// Геттер для получения текущего пользователя User? get currentUser => _currentUser; /// Проверяем, есть ли активный пользователь bool get hasCurrentUser => _currentUser != null; /// Конструктор сервиса UserService(this._userRepository) { _settingsBox = Hive.box('settings'); _loadCurrentUser(); // Загружаем сохраненного пользователя при запуске } /// Загружаем текущего пользователя из настроек Future _loadCurrentUser() async { final userId = _settingsBox.get(_currentUserKey); if (userId != null) { _currentUser = await _userRepository.getById(userId); notifyListeners(); // Уведомляем UI об изменении } } /// Устанавливаем текущего пользователя Future setCurrentUser(User user) async { _currentUser = user; // Сохраняем ID пользователя в настройках для следующего запуска await _settingsBox.put(_currentUserKey, user.id); notifyListeners(); // Уведомляем UI об изменении } /// Выход из аккаунта (сброс текущего пользователя) Future logout() async { _currentUser = null; await _settingsBox.delete(_currentUserKey); notifyListeners(); // Уведомляем UI об изменении } /// Создание нового пользователя и установка его как текущего Future createAndSetUser(String name, String email) async { final user = User(name: name, email: email); await _userRepository.add(user); await setCurrentUser(user); } /// Получение всех пользователей (для выбора) Future> getAllUsers() async { return await _userRepository.getAll(); } }