// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:flutter/material.dart'; class SignUpWidget extends StatefulWidget { const SignUpWidget( this.showResult, this.changeDisplay, this.setError, this.backToSignIn, { super.key, }); final void Function(String) showResult; final void Function(String) changeDisplay; final void Function(Object?) setError; final VoidCallback backToSignIn; @override State createState() => _SignUpWidgetState(); } class _SignUpWidgetState extends State { final usernameController = TextEditingController(); final passwordController = TextEditingController(); final emailController = TextEditingController(); final phoneController = TextEditingController(); void _signUp() async { final userAttributes = { CognitoUserAttributeKey.email: emailController.text, CognitoUserAttributeKey.phoneNumber: phoneController.text, }; try { final res = await Amplify.Auth.signUp( username: usernameController.text.trim(), password: passwordController.text.trim(), options: SignUpOptions(userAttributes: userAttributes), ); widget.showResult('Sign Up Status = ${res.nextStep.signUpStep}'); widget.changeDisplay( res.nextStep.signUpStep != AuthSignUpStep.done ? 'SHOW_CONFIRM' : 'SHOW_SIGN_UP', ); } on Exception catch (e) { widget.setError(e); } } @override Widget build(BuildContext context) { return Row( key: const Key('signup-component'), mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( // wrap your Column in Expanded child: Column( children: [ TextFormField( key: const Key('signup-username-input'), controller: usernameController, decoration: const InputDecoration( icon: Icon(Icons.person), hintText: 'The name you will use to login', labelText: 'Username *', ), ), TextFormField( key: const Key('signup-password-input'), obscureText: true, controller: passwordController, decoration: const InputDecoration( icon: Icon(Icons.lock), hintText: 'The password you will use to login', labelText: 'Password *', ), ), TextFormField( key: const Key('signup-email-input'), controller: emailController, decoration: const InputDecoration( icon: Icon(Icons.email), hintText: 'Your email address', labelText: 'Email *', ), ), TextFormField( key: const Key('signup-phone-input'), controller: phoneController, decoration: const InputDecoration( icon: Icon(Icons.phone), hintText: 'Your phone number', labelText: 'Phone number *', ), ), const Padding(padding: EdgeInsets.all(10)), ElevatedButton( key: const Key('signup-button'), onPressed: _signUp, child: const Text('Sign Up'), ), const Padding(padding: EdgeInsets.all(10)), ElevatedButton( key: const Key('goto-signin-button'), onPressed: widget.backToSignIn, child: const Text('Back to Sign In'), ), ], ), ), ], ); } }