102 lines
2.4 KiB
Dart
102 lines
2.4 KiB
Dart
import 'package:baseproject/core/common/bloc/bloc_index.dart';
|
|
import 'package:baseproject/core/common/index.dart';
|
|
import 'package:baseproject/features/repositories/hra_repository.dart';
|
|
import 'package:baseproject/features/usecases/user_use_cases.dart';
|
|
|
|
class LoginViewModel {
|
|
LoginViewModel({
|
|
this.isLoading = false,
|
|
this.errorMessage,
|
|
this.loginResponse,
|
|
this.captcha,
|
|
});
|
|
|
|
final bool isLoading;
|
|
final String? errorMessage;
|
|
final LoginResponseDto? loginResponse;
|
|
final DNTCaptchaApiResponse? captcha;
|
|
|
|
LoginViewModel copyWith({
|
|
bool? isLoading,
|
|
String? errorMessage,
|
|
LoginResponseDto? loginResponse,
|
|
DNTCaptchaApiResponse? captcha,
|
|
}) {
|
|
return LoginViewModel(
|
|
isLoading: isLoading ?? this.isLoading,
|
|
errorMessage: errorMessage,
|
|
loginResponse: loginResponse ?? this.loginResponse,
|
|
captcha: captcha ?? this.captcha,
|
|
);
|
|
}
|
|
}
|
|
|
|
class LoginBloc extends BaseCubit<BaseStateBloc<LoginViewModel>> {
|
|
LoginBloc(this._userUseCases) : super(InitState<LoginViewModel>(LoginViewModel())) {
|
|
loadCaptcha();
|
|
}
|
|
|
|
final UserUseCases _userUseCases;
|
|
|
|
Future<void> loadCaptcha() async {
|
|
final currentModel = state.model;
|
|
|
|
final result = await _userUseCases.getCaptcha();
|
|
|
|
result.fold(
|
|
(error) {
|
|
showErrorMessage(error);
|
|
},
|
|
(captcha) {
|
|
emit(
|
|
LoadedState<LoginViewModel>(
|
|
currentModel.copyWith(
|
|
isLoading: false,
|
|
errorMessage: null,
|
|
captcha: captcha,
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
Future<void> login(LoginDto request) async {
|
|
final currentModel = state.model;
|
|
|
|
emit(
|
|
LoadingState<LoginViewModel>(
|
|
currentModel.copyWith(isLoading: true, errorMessage: null),
|
|
),
|
|
);
|
|
|
|
final result = await _userUseCases.loginAccount(request);
|
|
|
|
result.fold(
|
|
(error) {
|
|
showErrorMessage(error);
|
|
emit(
|
|
ErrorState<LoginViewModel>(
|
|
currentModel.copyWith(
|
|
isLoading: false,
|
|
errorMessage: error,
|
|
),
|
|
),
|
|
);
|
|
loadCaptcha();
|
|
},
|
|
(response) {
|
|
emit(
|
|
LoadedState<LoginViewModel>(
|
|
currentModel.copyWith(
|
|
isLoading: false,
|
|
errorMessage: null,
|
|
loginResponse: response,
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|