import 'package:flutter/material.dart'; import 'package:tm_app/data/repositories/auth_repository.dart'; import 'package:tm_app/data/services/model/profile_data/profile_data.dart'; import '../core/utils/result.dart'; import '../data/repositories/profile_repository.dart'; import '../data/services/model/logout_response/logout_response.dart'; import '../data/services/model/profile_response/profile_response.dart'; class ProfileViewModel with ChangeNotifier { final ProfileRepository _profileRepository; final AuthRepository _authRepository; ProfileViewModel({ required ProfileRepository profileRepository, required AuthRepository authRepository, }) : _profileRepository = profileRepository, _authRepository = authRepository { getProfile(); } bool _isLoading = false; String? _errorMessage; ProfileData? _profileData; bool _loggedOut = false; bool get isLoading => _isLoading; bool get loggedOut => _loggedOut; String? get errorMessage => _errorMessage; ProfileData? get profileData => _profileData; Future getProfile() async { _isLoading = true; _errorMessage = null; notifyListeners(); final result = await _profileRepository.getProfile(); switch (result) { case Ok(): _profileData = result.value.data; break; case Error(): _errorMessage = result.error.toString(); break; } _isLoading = false; notifyListeners(); _errorMessage = null; notifyListeners(); } Future localLogout() async { await _authRepository.localLogout(); _loggedOut = true; notifyListeners(); } Future logout(BuildContext context) async { _errorMessage = null; notifyListeners(); final result = await _authRepository.logout(); switch (result) { case Ok(): localLogout(); break; case Error(): _errorMessage = result.error.toString(); break; } _errorMessage = null; notifyListeners(); } }