From ae5ad0910f3a15d038a6b903ef1909f210f2f3f3 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Thu, 24 Oct 2024 12:07:57 -0500 Subject: [PATCH] Add New Field to validate password --- lib/src/components/supa_email_auth.dart | 23 +++++++++++++++++++ .../supa_email_auth_localization.dart | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/lib/src/components/supa_email_auth.dart b/lib/src/components/supa_email_auth.dart index 2856212..1602677 100644 --- a/lib/src/components/supa_email_auth.dart +++ b/lib/src/components/supa_email_auth.dart @@ -214,6 +214,9 @@ class SupaEmailAuth extends StatefulWidget { final Widget? prefixIconEmail; final Widget? prefixIconPassword; + /// Whether the confirm password field should be displayed + final bool showConfirmPasswordField; + /// {@macro supa_email_auth} const SupaEmailAuth({ super.key, @@ -232,6 +235,7 @@ class SupaEmailAuth extends StatefulWidget { this.isInitiallySigningIn = true, this.prefixIconEmail = const Icon(Icons.email), this.prefixIconPassword = const Icon(Icons.lock), + this.showConfirmPasswordField = false, }); @override @@ -242,6 +246,7 @@ class _SupaEmailAuthState extends State { final _formKey = GlobalKey(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); + final _confirmPasswordController = TextEditingController(); late bool _isSigningIn; late final Map _metadataControllers; @@ -271,6 +276,7 @@ class _SupaEmailAuthState extends State { void dispose() { _emailController.dispose(); _passwordController.dispose(); + _confirmPasswordController.dispose(); for (final controller in _metadataControllers.values) { if (controller is TextEditingController) { controller.dispose(); @@ -345,6 +351,23 @@ class _SupaEmailAuthState extends State { } }, ), + if (widget.showConfirmPasswordField && !_isSigningIn) ...[ + spacer(16), + TextFormField( + controller: _confirmPasswordController, + decoration: InputDecoration( + prefixIcon: widget.prefixIconPassword, + label: Text(localization.confirmPassword), + ), + obscureText: true, + validator: (value) { + if (value != _passwordController.text) { + return localization.confirmPasswordError; + } + return null; + }, + ), + ], spacer(16), if (widget.metadataFields != null && !_isSigningIn) ...widget.metadataFields! diff --git a/lib/src/localizations/supa_email_auth_localization.dart b/lib/src/localizations/supa_email_auth_localization.dart index c17e88a..65665ce 100644 --- a/lib/src/localizations/supa_email_auth_localization.dart +++ b/lib/src/localizations/supa_email_auth_localization.dart @@ -13,6 +13,8 @@ class SupaEmailAuthLocalization { final String backToSignIn; final String unexpectedError; final String requiredFieldError; + final String confirmPasswordError; + final String confirmPassword; const SupaEmailAuthLocalization({ this.enterEmail = 'Enter your email', @@ -30,5 +32,7 @@ class SupaEmailAuthLocalization { this.backToSignIn = 'Back to sign in', this.unexpectedError = 'An unexpected error occurred', this.requiredFieldError = 'This field is required', + this.confirmPasswordError = 'Passwords do not match', + this.confirmPassword = 'Confirm Password', }); }