import 'package:flutter_bloc/flutter_bloc.dart'; import '../../domain/repositories/auth_repository.dart'; import 'auth_event.dart'; import 'auth_state.dart'; class AuthBloc extends Bloc { final AuthRepository authRepository; AuthBloc({required this.authRepository}) : super(const AuthState.initial()) { on(_onStarted); on(_onLoginRequested); on(_onRegisterRequested); on(_onLogoutRequested); on(_onAuthChecked); on(_onUsernameChanged); on(_onPasswordChanged); on(_onNameChanged); } Future _onStarted(AuthEventStarted event, Emitter emit) async { add(const AuthEvent.authChecked()); } Future _onLoginRequested(AuthEventLoginRequested event, Emitter emit) async { emit(const AuthState.loading()); final result = await authRepository.login(event.username, event.password); result.fold( (error) => emit(AuthState.error('loginFailed')), (user) => emit(AuthState.authenticated(user.id)), ); } Future _onRegisterRequested(AuthEventRegisterRequested event, Emitter emit) async { emit(const AuthState.loading()); final result = await authRepository.register(event.username, event.password, event.name); result.fold( (error) => emit(AuthState.error('registrationFailed')), (user) => emit(AuthState.authenticated(user.id)), ); } Future _onLogoutRequested(AuthEventLogoutRequested event, Emitter emit) async { emit(const AuthState.loading()); await authRepository.logout(); emit(const AuthState.unauthenticated()); } Future _onAuthChecked(AuthEventAuthChecked event, Emitter emit) async { final result = await authRepository.getCurrentUser(); result.fold( (error) => emit(const AuthState.unauthenticated()), (user) => emit(AuthState.authenticated(user.id)), ); } void _onUsernameChanged(AuthEventUsernameChanged event, Emitter emit) {} void _onPasswordChanged(AuthEventPasswordChanged event, Emitter emit) {} void _onNameChanged(AuthEventNameChanged event, Emitter emit) {} }