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.
64 lines
1.6 KiB
64 lines
1.6 KiB
import 'package:account/pages/login/widget/portal_form.dart';
|
|
import 'package:core/index.dart';
|
|
import 'package:get/get.dart';
|
|
import 'state.dart';
|
|
|
|
class LoginController extends GetxController {
|
|
AuthService get authService => injector.get();
|
|
SessionService get sessionService => injector.get();
|
|
|
|
final Rx<LoginState> _state = Rx<LoginState>(LoginState(
|
|
loading: false,
|
|
showPassword: false,
|
|
portalProviders: [],
|
|
));
|
|
LoginState get state => _state.value;
|
|
|
|
void changePwdVisiable() {
|
|
_state.update((val) {
|
|
val?.showPassword = !val.showPassword;
|
|
});
|
|
}
|
|
|
|
Future<void> login() async {
|
|
await portalLogin(null);
|
|
}
|
|
|
|
void showPortalLoginDialog() {
|
|
Get.defaultDialog(
|
|
title: 'Label:LoginToPortal'.tr,
|
|
content: Obx(() => PortalForm(
|
|
portalProviders: state.portalProviders,
|
|
onSelected: portalLogin,
|
|
),
|
|
),
|
|
barrierDismissible: false,
|
|
);
|
|
}
|
|
|
|
Future<void> portalLogin(PortalLoginProvider? provider) async {
|
|
_state.update((val) {
|
|
val?.loading = true;
|
|
});
|
|
try {
|
|
await authService.portal(PortalLoginParams(
|
|
enterpriseId: provider?.id,
|
|
username: state.username.text,
|
|
password: state.password.text));
|
|
//sessionService.refreshToken(token);
|
|
state.username.clear();
|
|
state.password.clear();
|
|
Get.back(closeOverlays: true);
|
|
} on PortalLoginException catch (error) {
|
|
_state.update((val) {
|
|
val!.portalProviders = error.providers;
|
|
});
|
|
showPortalLoginDialog();
|
|
}
|
|
finally {
|
|
_state.update((val) {
|
|
val?.loading = false;
|
|
});
|
|
}
|
|
}
|
|
}
|