onListen method

  1. @override
void onListen(
  1. BuildContext context,
  2. IPhoneVerificationViewModel viewModel
)
override

Implementation

@override
void onListen(
    BuildContext context, IPhoneVerificationViewModel viewModel) async {
  super.onListen(context, viewModel);

  switch (viewModel.state) {
    case PhoneVerificationState.requestingResendingCode:
    case PhoneVerificationState.verifyingCode:
    case PhoneVerificationState.verifiedCode:
    case PhoneVerificationState.waitingCodeReceive:
      if (_codeInputFocus.hasFocus) {
        _codeInputFocus.unfocus();
      }
      if (PhoneVerificationState.verifiedCode == viewModel.state) {
        this.onVerified(viewModel.phoneNumber.phoneNumber!);
      }
      break;

    case PhoneVerificationState.requestingSendCode:
    case PhoneVerificationState.errorRequestingSendCode:
      if (_phoneNumberInputFocus.hasFocus) {
        _phoneNumberInputFocus.unfocus();
      }
      break;

    case PhoneVerificationState.inputCode:
    case PhoneVerificationState.readyToVerify:
    case PhoneVerificationState.timeoutWaitingCodeReceive:
    case PhoneVerificationState.errorVerifyingCodeExpired:
    case PhoneVerificationState.errorVerifyingCodeInvalid:
      if (viewModel.state ==
              PhoneVerificationState.errorVerifyingCodeInvalid ||
          viewModel.state ==
              PhoneVerificationState.errorVerifyingCodeExpired) {
        _inputCodeController.text = "";
      }

      if (!_codeInputFocus.hasFocus) {
        // to show keyboard
        // TODO need to improve.
        await Future.delayed(Duration(seconds: 1));
        _codeInputFocus.requestFocus();
        dev.log("_codeInputFocus.requestFocus()",
            name: 'PhoneVerificationPage');
      }
      break;

    case PhoneVerificationState.inputPhoneNumber:
    case PhoneVerificationState.readyToSendCode:
      if (!_phoneNumberInputFocus.hasFocus) {
        _phoneNumberInputFocus.requestFocus();
      }
      break;
  }
}