import 'package:flutter_bloc/flutter_bloc.dart'; import 'auth_event.dart'; import 'auth_state.dart'; import '../../../domain/use_cases/auth/login.dart'; import '../../../domain/repositories/auth_repository.dart'; class AuthBloc extends Bloc { final Login loginUseCase; final AuthRepository authRepository; AuthBloc({ required this.loginUseCase, required this.authRepository, }) : super(const AuthInitial()) { on(_onLoginRequested); on(_onLogoutRequested); on(_onCheckAuthStatus); } Future _onLoginRequested( LoginRequested event, Emitter emit, ) async { emit(const AuthLoading()); final result = await loginUseCase(event.username, event.password); result.fold( (failure) => emit(AuthError(failure.message)), (user) => emit(Authenticated(user)), ); } Future _onLogoutRequested( LogoutRequested event, Emitter emit, ) async { emit(const AuthLoading()); final result = await authRepository.logout(); result.fold( (failure) => emit(AuthError(failure.message)), (_) => emit(const Unauthenticated()), ); } Future _onCheckAuthStatus( CheckAuthStatus event, Emitter emit, ) async { emit(const AuthLoading()); final result = await authRepository.getCurrentUser(); result.fold( (failure) => emit(const Unauthenticated()), (user) { if (user != null) { emit(Authenticated(user)); } else { emit(const Unauthenticated()); } }, ); } }