49 lines
1.2 KiB
Dart
49 lines
1.2 KiB
Dart
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<SignInEvent, SignInState> {
|
|
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<SignInRequired>(_onSignInRequired);
|
|
on<SignOutRequired>(_onSignOutRequired);
|
|
}
|
|
|
|
void _onSignInRequired(
|
|
SignInRequired event, Emitter<SignInState> 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<SignInState> emit) async {
|
|
await _userRepository.logOut();
|
|
}
|
|
}
|