import 'package:flutter_bloc/flutter_bloc.dart'; import '../../data/auth_repository.dart'; import 'auth_event.dart'; import 'auth_state.dart'; class AuthBloc extends Bloc { final AuthRepository _repository; AuthBloc(this._repository) : super(AuthInitial()) { on(_onStarted); on(_onLoggedIn); on(_onLoggedOut); } Future _onStarted(AuthStarted event, Emitter emit) async { emit(AuthLoading()); final refreshToken = await _repository.getRefreshToken(); if (refreshToken != null) { try { final response = await _repository.refresh(refreshToken); emit( AuthAuthenticated( user: AuthUser(id: response.user.id, email: response.user.email), ), ); return; } catch (_) { await _repository.logout(); } } emit(AuthUnauthenticated()); } void _onLoggedIn(AuthLoggedIn event, Emitter emit) { emit(AuthAuthenticated(user: event.user)); } Future _onLoggedOut( AuthLoggedOut event, Emitter emit, ) async { await _repository.logout(); emit(AuthUnauthenticated()); } }