LoginBloc.dart (1125B)
1 import 'dart:async'; 2 3 import 'package:bloc/bloc.dart'; 4 import 'package:meta/meta.dart'; 5 6 import '../events/LoginEvent.dart'; 7 import '../events/AuthenticationEvent.dart'; 8 import '../repos/UserRepository.dart'; 9 import '../states/LoginState.dart'; 10 import 'AuthenticationBloc.dart'; 11 12 class LoginBloc extends Bloc<LoginEvent, LoginState> { 13 final UserRepository userRepository; 14 final AuthenticationBloc authenticationBloc; 15 16 LoginBloc({ 17 @required this.userRepository, 18 @required this.authenticationBloc, 19 }) : assert(userRepository != null), 20 assert(authenticationBloc != null); 21 22 LoginState get initialState => LoginInitial(); 23 24 @override 25 Stream<LoginState> mapEventToState(LoginEvent event) async* { 26 if (event is LoginButtonPressed) { 27 yield LoginLoading(); 28 29 try { 30 final token = await userRepository.authenticate( 31 username: event.username, 32 password: event.password, 33 ); 34 35 authenticationBloc.add(LoggedIn(token: token)); 36 yield LoginInitial(); 37 } catch (error) { 38 yield LoginFailure(error: error.toString()); 39 } 40 } 41 } 42 }