import 'dart:developer'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:meta/meta.dart'; import 'package:user_repository/user_repository.dart'; part 'sign_in_event.dart'; part 'sign_in_state.dart'; class SignInBloc extends Bloc { final UserRepository _userRepository; SignInBloc({required UserRepository userRepository}) : _userRepository = userRepository, super(SignInInitial()) { userRepository.streamUser().listen((authUser) { try { if (authUser == null) { emit(SignInFailure()); } else { emit(SignInSuccess()); } } catch (e) { log(e.toString()); } }); on(_onSignInRequired); on(_onSignOutRequired); } void _onSignInRequired( SignInRequired event, Emitter emit) async { emit(SignInProcess()); try { await _userRepository.signIn(event.email, event.password); emit(SignInSuccess()); } catch (e) { log(e.toString()); emit(const SignInFailure()); } } void _onSignOutRequired( SignOutRequired event, Emitter emit) async { await _userRepository.logOut(); } }