signIn method

Future<void> signIn()

Signs in and redirects to the Routes.erase page.

Username is login's text and the password is password's text.

Implementation

Future<void> signIn() async {
  UserLogin? userLogin;
  UserNum? num;
  UserEmail? email;
  UserPhone? phone;

  login.error.value = null;
  password.error.value = null;

  if (login.text.isEmpty) {
    password.error.value = 'err_incorrect_login_or_password'.l10n;
    password.unsubmit();
    return;
  }

  try {
    userLogin = UserLogin(login.text.toLowerCase());
  } catch (e) {
    // No-op.
  }

  try {
    num = UserNum(login.text);
  } catch (e) {
    // No-op.
  }

  try {
    email = UserEmail(login.text.toLowerCase());
  } catch (e) {
    // No-op.
  }

  try {
    phone = UserPhone(login.text);
  } catch (e) {
    // No-op.
  }

  if (password.text.isEmpty) {
    password.error.value = 'err_incorrect_login_or_password'.l10n;
    password.unsubmit();
    return;
  }

  if (userLogin == null && num == null && email == null && phone == null) {
    password.error.value = 'err_incorrect_login_or_password'.l10n;
    password.unsubmit();
    return;
  }

  try {
    login.status.value = RxStatus.loading();
    password.status.value = RxStatus.loading();

    await _authService.signIn(
      password: UserPassword(password.text),
      login: userLogin,
      num: num,
      email: email,
      phone: phone,
    );

    router.go(Routes.erase);
    router.tab = HomeTab.menu;
  } on FormatException {
    password.error.value = 'err_incorrect_login_or_password'.l10n;
  } on ConnectionException {
    password.unsubmit();
    password.resubmitOnError.value = true;
    password.error.value = 'err_data_transfer'.l10n;
  } catch (e) {
    password.unsubmit();
    password.resubmitOnError.value = true;
    password.error.value = 'err_data_transfer'.l10n;
    rethrow;
  } finally {
    login.status.value = RxStatus.empty();
    password.status.value = RxStatus.empty();
  }
}