65 lines
2.8 KiB
Dart
65 lines
2.8 KiB
Dart
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<void> _loadCurrentUser() async {
|
|
final userId = _settingsBox.get(_currentUserKey);
|
|
if (userId != null) {
|
|
_currentUser = await _userRepository.getById(userId);
|
|
notifyListeners(); // Уведомляем UI об изменении
|
|
}
|
|
}
|
|
|
|
/// Устанавливаем текущего пользователя
|
|
Future<void> setCurrentUser(User user) async {
|
|
_currentUser = user;
|
|
// Сохраняем ID пользователя в настройках для следующего запуска
|
|
await _settingsBox.put(_currentUserKey, user.id);
|
|
notifyListeners(); // Уведомляем UI об изменении
|
|
}
|
|
|
|
/// Выход из аккаунта (сброс текущего пользователя)
|
|
Future<void> logout() async {
|
|
_currentUser = null;
|
|
await _settingsBox.delete(_currentUserKey);
|
|
notifyListeners(); // Уведомляем UI об изменении
|
|
}
|
|
|
|
/// Создание нового пользователя и установка его как текущего
|
|
Future<void> createAndSetUser(String name, String email) async {
|
|
final user = User(name: name, email: email);
|
|
await _userRepository.add(user);
|
|
await setCurrentUser(user);
|
|
}
|
|
|
|
/// Получение всех пользователей (для выбора)
|
|
Future<List<User>> getAllUsers() async {
|
|
return await _userRepository.getAll();
|
|
}
|
|
}
|