You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
6.1 KiB
189 lines
6.1 KiB
// import 'dart:async';
|
|
import 'package:bytedesk_kefu/model/codeResult.dart';
|
|
import 'package:bytedesk_kefu/model/jsonResult.dart';
|
|
import 'package:bytedesk_kefu/model/oauth.dart';
|
|
import 'package:bloc/bloc.dart';
|
|
import 'package:bytedesk_kefu/blocs/login_bloc/bloc.dart';
|
|
import 'package:bytedesk_kefu/repositories/repositories.dart';
|
|
|
|
class LoginBloc extends Bloc<LoginEvent, LoginState> {
|
|
//
|
|
final UserRepository _userRepository = new UserRepository();
|
|
|
|
LoginBloc() : super(LoginInitial()) {
|
|
on<LoginButtonPressed>(_mapLoginState);
|
|
on<SMSLoginButtonPressed>(_mapSMSLoginState);
|
|
on<RegisterButtonPressed>(_mapRegisterState);
|
|
on<RequestCodeButtonPressed>(_mapRequestCodeState);
|
|
on<BindMobileEvent>(_mapBindMobileState);
|
|
on<UnionidOAuthEvent>(_mapUnionidOAuthState);
|
|
on<ResetPasswordButtonPressed>(_mapResetPasswordState);
|
|
on<UpdatePasswordButtonPressed>(_mapUpdatePasswordState);
|
|
}
|
|
|
|
// @override
|
|
// void mapEventToState(LoginEvent event, Emitter<LoginState> emit) async {
|
|
// //
|
|
// if (event is LoginButtonPressed) {
|
|
// yield* _mapLoginState(event);
|
|
// } else if (event is SMSLoginButtonPressed) {
|
|
// yield* _mapSMSLoginState(event);
|
|
// } else if (event is RegisterButtonPressed) {
|
|
// yield* _mapRegisterState(event);
|
|
// } else if (event is RequestCodeButtonPressed) {
|
|
// yield* _mapRequestCodeState(event);
|
|
// } else if (event is BindMobileEvent) {
|
|
// yield* _mapBindMobileState(event);
|
|
// } else if (event is UnionidOAuthEvent) {
|
|
// yield* _mapUnionidOAuthState(event);
|
|
// } else if (event is ResetPasswordButtonPressed) {
|
|
// yield* _mapResetPasswordState(event);
|
|
// } else if (event is UpdatePasswordButtonPressed) {
|
|
// yield* _mapUpdatePasswordState(event);
|
|
// }
|
|
// }
|
|
|
|
void _mapLoginState(LoginButtonPressed event, Emitter<LoginState> emit) async {
|
|
emit(LoginInProgress());
|
|
try {
|
|
OAuth oauth = await _userRepository.login(event.username, event.password);
|
|
if (oauth.statusCode == 200) {
|
|
// 用户名密码正确,登录成功
|
|
emit(LoginSuccess());
|
|
} else {
|
|
// 用户名密码错误,登录失败
|
|
emit(LoginError());
|
|
}
|
|
} catch (error) {
|
|
// 网络或其他错误
|
|
emit(LoginFailure(error: error.toString()));
|
|
}
|
|
}
|
|
|
|
void _mapSMSLoginState(SMSLoginButtonPressed event, Emitter<LoginState> emit) async {
|
|
emit(LoginInProgress());
|
|
try {
|
|
//
|
|
OAuth oauth = await _userRepository.smsOAuth(event.mobile, event.code);
|
|
if (oauth.statusCode == 200) {
|
|
// 用户名密码正确,登录成功
|
|
emit(SMSLoginSuccess());
|
|
} else {
|
|
// 用户名密码错误,登录失败
|
|
emit(LoginError());
|
|
}
|
|
} catch (error) {
|
|
// 网络或其他错误
|
|
emit(LoginFailure(error: error.toString()));
|
|
}
|
|
}
|
|
|
|
void _mapRegisterState(RegisterButtonPressed event, Emitter<LoginState> emit) async {
|
|
emit(RegisterInProgress());
|
|
try {
|
|
//
|
|
JsonResult jsonResult =
|
|
await _userRepository.register(event.mobile, event.password);
|
|
if (jsonResult.statusCode == 200) {
|
|
emit(RegisterSuccess());
|
|
} else {
|
|
emit(RegisterError(
|
|
message: jsonResult.message, statusCode: jsonResult.statusCode));
|
|
}
|
|
} catch (error) {
|
|
// 网络或其他错误
|
|
emit(LoginFailure(error: error.toString()));
|
|
}
|
|
}
|
|
|
|
void _mapRequestCodeState(RequestCodeButtonPressed event, Emitter<LoginState> emit) async {
|
|
emit(RequestCodeInProgress());
|
|
try {
|
|
//
|
|
CodeResult codeResult = await _userRepository.requestCode(event.mobile);
|
|
if (codeResult.statusCode == 200) {
|
|
emit(RequestCodeSuccess(codeResult: codeResult));
|
|
} else {
|
|
emit(RequestCodeError(
|
|
message: codeResult.message, statusCode: codeResult.statusCode));
|
|
}
|
|
} catch (error) {
|
|
// 网络或其他错误
|
|
emit(LoginFailure(error: error.toString()));
|
|
}
|
|
}
|
|
|
|
void _mapBindMobileState(BindMobileEvent event, Emitter<LoginState> emit) async {
|
|
emit(BindMobileInProgress());
|
|
try {
|
|
//
|
|
JsonResult jsonResult = await _userRepository.bindMobile(event.mobile);
|
|
if (jsonResult.statusCode == 200) {
|
|
emit(BindMobileSuccess(jsonResult: jsonResult));
|
|
} else {
|
|
emit(BindMobileError(
|
|
message: jsonResult.message, statusCode: jsonResult.statusCode));
|
|
}
|
|
} catch (error) {
|
|
// 网络或其他错误
|
|
emit(LoginFailure(error: error.toString()));
|
|
}
|
|
}
|
|
|
|
void _mapUnionidOAuthState(UnionidOAuthEvent event, Emitter<LoginState> emit) async {
|
|
emit(UnionidOAuthInProgress());
|
|
try {
|
|
//
|
|
OAuth oauth = await _userRepository.unionIdOAuth(event.unionid);
|
|
if (oauth.statusCode == 200) {
|
|
// 登录成功
|
|
emit(UnionidLoginSuccess());
|
|
} else {
|
|
// 登录失败
|
|
emit(LoginError());
|
|
}
|
|
} catch (error) {
|
|
// 网络或其他错误
|
|
emit(LoginFailure(error: error.toString()));
|
|
}
|
|
}
|
|
|
|
void _mapResetPasswordState(ResetPasswordButtonPressed event, Emitter<LoginState> emit) async {
|
|
emit(ResetPasswordInProgress());
|
|
try {
|
|
//
|
|
JsonResult jsonResult =
|
|
await _userRepository.changePassword(event.mobile, event.password);
|
|
if (jsonResult.statusCode == 200) {
|
|
emit(ResetPasswordSuccess());
|
|
} else {
|
|
emit(ResetPasswordError(
|
|
message: jsonResult.message, statusCode: jsonResult.statusCode));
|
|
}
|
|
} catch (error) {
|
|
// 网络或其他错误
|
|
emit(LoginFailure(error: error.toString()));
|
|
}
|
|
}
|
|
|
|
void _mapUpdatePasswordState(UpdatePasswordButtonPressed event, Emitter<LoginState> emit) async {
|
|
//
|
|
emit(UpdatePasswordInProgress());
|
|
try {
|
|
//
|
|
JsonResult jsonResult =
|
|
await _userRepository.changePassword(event.mobile, event.password);
|
|
if (jsonResult.statusCode == 200) {
|
|
emit(UpdatePasswordSuccess());
|
|
} else {
|
|
emit(UpdatePasswordError(
|
|
message: jsonResult.message, statusCode: jsonResult.statusCode));
|
|
}
|
|
} catch (error) {
|
|
// 网络或其他错误
|
|
emit(LoginFailure(error: error.toString()));
|
|
}
|
|
}
|
|
|
|
}
|