signUp method

  1. @override
Future<Verification> signUp(
  1. User user,
  2. String password
)
override

Signs up the given user with the given password

Implementation

@override
Future<Verification> signUp(
  User user,
  String password,
) async {
  final completer = Completer<Verification>();

  _amplifyAuth
      .signUp(
    username: user.username,
    password: password,
    options: aws_cognito.SignUpOptions(
      userAttributes: {
        AuthUserAttributeKey.email: user.emailAddress,
        AuthUserAttributeKey.phoneNumber: user.mobilePhone,
      },
    ),
  )
      .then(
    (result) {
      _logger.fine('Successful sign up: $result');

      final nextStep = result.nextStep;
      switch (nextStep.signUpStep) {
        case aws_cognito.AuthSignUpStep.confirmSignUp:
          _enqueueEvent(SignedUpEvent(user));
          completer.complete(_createVerificationResult(
            VerificationFlow.signUp,
            nextStep.codeDeliveryDetails,
          ));
          break;

        case aws_cognito.AuthSignUpStep.done:
          _enqueueEvent(SignedUpEvent(user));
          completer.complete(
            Verification(
              isConfirmed: true,
              flow: VerificationFlow.signUp,
            ),
          );
          break;

        default:
          completer.completeError(SignUpException(
            message: 'Unknown sign up step: ${nextStep.signUpStep.name}',
          ));
      }
    },
  ).onError<aws_cognito.UsernameExistsException>((e, stackTrace) {
    completer.completeError(
      UsernameExistsException(
        message: 'username already exists',
        innerException: e,
        innerStackTrace: stackTrace,
      ),
    );
  }).onError<aws_cognito.AuthException>((e, stackTrace) {
    completer.completeError(
      SignUpException(
        message: 'failed to sign up user',
        innerException: e,
        innerStackTrace: stackTrace,
      ),
    );
  });

  return completer.future;
}