Skip to content

Commit 99513e9

Browse files
authored
Add New Field to validate password (#129)
1 parent 2f38b5d commit 99513e9

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

lib/src/components/supa_email_auth.dart

+23
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ class SupaEmailAuth extends StatefulWidget {
214214
final Widget? prefixIconEmail;
215215
final Widget? prefixIconPassword;
216216

217+
/// Whether the confirm password field should be displayed
218+
final bool showConfirmPasswordField;
219+
217220
/// {@macro supa_email_auth}
218221
const SupaEmailAuth({
219222
super.key,
@@ -232,6 +235,7 @@ class SupaEmailAuth extends StatefulWidget {
232235
this.isInitiallySigningIn = true,
233236
this.prefixIconEmail = const Icon(Icons.email),
234237
this.prefixIconPassword = const Icon(Icons.lock),
238+
this.showConfirmPasswordField = false,
235239
});
236240

237241
@override
@@ -242,6 +246,7 @@ class _SupaEmailAuthState extends State<SupaEmailAuth> {
242246
final _formKey = GlobalKey<FormState>();
243247
final _emailController = TextEditingController();
244248
final _passwordController = TextEditingController();
249+
final _confirmPasswordController = TextEditingController();
245250
late bool _isSigningIn;
246251
late final Map<String, MetadataController> _metadataControllers;
247252

@@ -271,6 +276,7 @@ class _SupaEmailAuthState extends State<SupaEmailAuth> {
271276
void dispose() {
272277
_emailController.dispose();
273278
_passwordController.dispose();
279+
_confirmPasswordController.dispose();
274280
for (final controller in _metadataControllers.values) {
275281
if (controller is TextEditingController) {
276282
controller.dispose();
@@ -345,6 +351,23 @@ class _SupaEmailAuthState extends State<SupaEmailAuth> {
345351
}
346352
},
347353
),
354+
if (widget.showConfirmPasswordField && !_isSigningIn) ...[
355+
spacer(16),
356+
TextFormField(
357+
controller: _confirmPasswordController,
358+
decoration: InputDecoration(
359+
prefixIcon: widget.prefixIconPassword,
360+
label: Text(localization.confirmPassword),
361+
),
362+
obscureText: true,
363+
validator: (value) {
364+
if (value != _passwordController.text) {
365+
return localization.confirmPasswordError;
366+
}
367+
return null;
368+
},
369+
),
370+
],
348371
spacer(16),
349372
if (widget.metadataFields != null && !_isSigningIn)
350373
...widget.metadataFields!

lib/src/localizations/supa_email_auth_localization.dart

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ class SupaEmailAuthLocalization {
1313
final String backToSignIn;
1414
final String unexpectedError;
1515
final String requiredFieldError;
16+
final String confirmPasswordError;
17+
final String confirmPassword;
1618

1719
const SupaEmailAuthLocalization({
1820
this.enterEmail = 'Enter your email',
@@ -30,5 +32,7 @@ class SupaEmailAuthLocalization {
3032
this.backToSignIn = 'Back to sign in',
3133
this.unexpectedError = 'An unexpected error occurred',
3234
this.requiredFieldError = 'This field is required',
35+
this.confirmPasswordError = 'Passwords do not match',
36+
this.confirmPassword = 'Confirm Password',
3337
});
3438
}

0 commit comments

Comments
 (0)