onInit method
override
Called immediately after the widget is allocated in memory. You might use this to initialize something for the controller.
Implementation
@override
void onInit() {
login = TextFieldState(
text: _myUser?.num.toString(),
onChanged: (_) {
password.error.value = null;
password.unsubmit();
repeatPassword.unsubmit();
},
onSubmitted: (s) {
password.focus.requestFocus();
s.unsubmit();
},
);
password = TextFieldState(
onFocus: (s) => s.unsubmit(),
onChanged: (_) {
password.error.value = null;
password.unsubmit();
repeatPassword.error.value = null;
repeatPassword.unsubmit();
},
onSubmitted: (s) => signIn(),
);
recovery = TextFieldState(onSubmitted: (s) => recoverAccess());
recoveryCode = TextFieldState(onSubmitted: (s) => validateCode());
newPassword = TextFieldState(
onChanged: (_) {
repeatPassword.error.value = null;
repeatPassword.unsubmit();
},
onSubmitted: (s) {
repeatPassword.focus.requestFocus();
s.unsubmit();
},
);
repeatPassword = TextFieldState(
onFocus: (s) {
switch (stage.value) {
case LoginViewStage.signUpWithPassword:
if (s.text != password.text && password.isValidated) {
s.error.value = 'err_passwords_mismatch'.l10n;
}
break;
default:
if (s.text != newPassword.text && newPassword.isValidated) {
s.error.value = 'err_passwords_mismatch'.l10n;
}
break;
}
},
onSubmitted: (s) async {
switch (stage.value) {
case LoginViewStage.signUpWithPassword:
final userLogin = UserLogin.tryParse(login.text);
final userPassword = UserPassword.tryParse(password.text);
if (userLogin == null) {
login.error.value = 'err_incorrect_login_input'.l10n;
return;
}
if (userPassword == null) {
password.error.value = 'err_password_incorrect'.l10n;
return;
}
try {
await register(login: userLogin, password: userPassword);
} on SignUpException catch (e) {
login.error.value = e.toMessage();
} catch (e) {
password.error.value = 'err_data_transfer'.l10n;
rethrow;
}
break;
default:
await resetUserPassword();
break;
}
},
);
email = TextFieldState(
onFocus: (s) {
if (s.text.trim().isNotEmpty) {
try {
UserEmail(s.text.toLowerCase());
} on FormatException {
s.error.value = 'err_incorrect_email'.l10n;
}
}
},
onSubmitted: (s) async {
final UserEmail? email = UserEmail.tryParse(s.text.toLowerCase());
if (email == null) {
s.error.value = 'err_incorrect_email'.l10n;
} else {
emailCode.clear();
final LoginViewStage previous = stage.value;
stage.value = switch (stage.value) {
LoginViewStage.signInWithEmail =>
LoginViewStage.signInWithEmailCode,
(_) => LoginViewStage.signUpWithEmailCode,
};
try {
await _authService.createConfirmationCode(email: email);
s.unsubmit();
} on AddUserEmailException catch (e) {
s.error.value = e.toMessage();
_setResendEmailTimer(false);
stage.value = previous;
} catch (_) {
s.resubmitOnError.value = true;
s.error.value = 'err_data_transfer'.l10n;
_setResendEmailTimer(false);
s.unsubmit();
stage.value = previous;
rethrow;
}
}
},
);
emailCode = TextFieldState(
onSubmitted: (s) async {
s.status.value = RxStatus.loading();
try {
UserLogin? userLogin;
UserNum? userNum;
UserEmail? userEmail;
UserPhone? userPhone;
switch (stage.value) {
case LoginViewStage.signUpWithEmailCode:
userEmail = UserEmail.tryParse(email.text);
break;
default:
userLogin = UserLogin.tryParse(identifier.text);
userNum = UserNum.tryParse(identifier.text);
userEmail = UserEmail.tryParse(identifier.text);
userPhone = UserPhone.tryParse(identifier.text);
break;
}
await _authService.signIn(
email: userEmail,
login: userLogin,
num: userNum,
phone: userPhone,
code: ConfirmationCode(emailCode.text),
);
(onSuccess ?? router.home)(signedUp: true);
} on CreateSessionException catch (e) {
switch (e.code) {
case CreateSessionErrorCode.wrongCode:
s.error.value = e.toMessage();
++codeAttempts;
if (codeAttempts >= 3) {
codeAttempts = 0;
_setCodeTimer();
}
s.status.value = RxStatus.empty();
break;
default:
s.error.value = 'err_wrong_code'.l10n;
break;
}
} on FormatException catch (_) {
s.error.value = 'err_wrong_code'.l10n;
s.status.value = RxStatus.empty();
++codeAttempts;
if (codeAttempts >= 3) {
codeAttempts = 0;
_setCodeTimer();
}
} catch (_) {
s.resubmitOnError.value = true;
s.error.value = 'err_data_transfer'.l10n;
s.status.value = RxStatus.empty();
s.unsubmit();
rethrow;
}
},
);
identifier = TextFieldState(
onSubmitted: (s) async {
final UserLogin? userLogin = UserLogin.tryParse(s.text);
final UserNum? userNum = UserNum.tryParse(s.text);
final UserEmail? userEmail = UserEmail.tryParse(s.text);
final UserPhone? userPhone = UserPhone.tryParse(s.text);
emailCode.clear();
final LoginViewStage previous = stage.value;
stage.value = switch (stage.value) {
LoginViewStage.signInWithEmail => LoginViewStage.signInWithEmailCode,
(_) => LoginViewStage.signUpWithEmailCode,
};
_setResendEmailTimer();
try {
if (userLogin != null ||
userNum != null ||
userEmail != null ||
userPhone != null) {
await _authService.createConfirmationCode(
email: userEmail,
login: userLogin,
num: userNum,
phone: userPhone,
);
}
s.unsubmit();
} on AddUserEmailException catch (e) {
s.error.value = e.toMessage();
_setResendEmailTimer(false);
stage.value = previous;
} catch (_) {
s.resubmitOnError.value = true;
s.error.value = 'err_data_transfer'.l10n;
_setResendEmailTimer(false);
s.unsubmit();
stage.value = previous;
rethrow;
}
},
);
super.onInit();
}