From 7012942ce50a2de8c8a481595d8bca6e7a02c4de Mon Sep 17 00:00:00 2001 From: FahadFahim71 <45163265+FahadFahim71@users.noreply.github.com> Date: Fri, 2 Feb 2024 22:18:03 +0100 Subject: [PATCH] feat: add title widget and login button builder --- lib/src/auth_screen.dart | 61 ++++++++++++++---------- lib/src/config/registration_options.dart | 4 ++ lib/src/model/auth_text_field.dart | 47 +++++++++--------- lib/src/registration_screen.dart | 2 + 4 files changed, 67 insertions(+), 47 deletions(-) diff --git a/lib/src/auth_screen.dart b/lib/src/auth_screen.dart index bc18d18..5ccfdfe 100644 --- a/lib/src/auth_screen.dart +++ b/lib/src/auth_screen.dart @@ -19,6 +19,8 @@ class AuthScreen extends StatefulWidget { this.customBackgroundColor, this.nextButtonBuilder, this.previousButtonBuilder, + this.titleWidget, + this.loginButton, super.key, }) : assert(steps.length > 0, 'At least one step is required'); @@ -35,6 +37,8 @@ class AuthScreen extends StatefulWidget { final Color? customBackgroundColor; final Widget Function(Future Function(), String)? nextButtonBuilder; final Widget? Function(VoidCallback, String)? previousButtonBuilder; + final Widget? titleWidget; + final Widget? loginButton; @override State createState() => _AuthScreenState(); @@ -114,38 +118,40 @@ class _AuthScreenState extends State { children: [ for (AuthStep step in widget.steps) Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + // Text(widget.title), + if (widget.titleWidget != null) widget.titleWidget!, + const SizedBox(height: 40), Flexible( - child: Center( - child: ListView( - physics: const ClampingScrollPhysics(), - shrinkWrap: true, - padding: const EdgeInsets.symmetric( - vertical: 8.0, - horizontal: 30.0, - ), - children: [ - for (AuthField field in step.fields) - Align( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (field.title != null) ...[ - field.title!, - ], - field.build(), - ], - ), - ) - ], + child: ListView( + physics: const ClampingScrollPhysics(), + shrinkWrap: true, + padding: const EdgeInsets.symmetric( + vertical: 8.0, + horizontal: 30.0, ), + children: [ + for (AuthField field in step.fields) + Align( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (field.title != null) ...[ + field.title!, + ], + field.build(), + ], + ), + ) + ], ), ), + const Spacer(), Padding( padding: const EdgeInsets.only( top: 15.0, - bottom: 30.0, + // bottom: 30.0, left: 30.0, right: 30.0, ), @@ -209,7 +215,12 @@ class _AuthScreenState extends State { ), ], ), - ) + ), + if (widget.loginButton != null) + Padding( + padding: const EdgeInsets.all(8.0), + child: widget.loginButton!, + ), ], ), ], diff --git a/lib/src/config/registration_options.dart b/lib/src/config/registration_options.dart index d45c9c6..52e0e06 100644 --- a/lib/src/config/registration_options.dart +++ b/lib/src/config/registration_options.dart @@ -18,6 +18,8 @@ class RegistrationOptions { this.nextButtonBuilder, this.previousButtonBuilder, this.backgroundColor, + this.titleWidget, + this.loginButton, }); final RegistrationTranslations registrationTranslations; @@ -31,6 +33,8 @@ class RegistrationOptions { final Widget? Function(VoidCallback onPressed, String label)? previousButtonBuilder; final Color? backgroundColor; + Widget? titleWidget; + Widget? loginButton; static List getDefaultSteps({ TextEditingController? emailController, diff --git a/lib/src/model/auth_text_field.dart b/lib/src/model/auth_text_field.dart index 51350a2..1a69293 100644 --- a/lib/src/model/auth_text_field.dart +++ b/lib/src/model/auth_text_field.dart @@ -57,30 +57,33 @@ class AuthTextField extends AuthField { } } - return TextFormField( - style: textStyle, - decoration: textFieldDecoration ?? - InputDecoration( - label: label, - hintText: hintText, - suffix: suffix, - ), - controller: textController, - obscureText: hidden ?? obscureText, - onChanged: (v) { - value = v; - onChange?.call(value); - }, - validator: (value) { - for (var validator in validators) { - var output = validator(value); - if (output != null) { - return output; + return Padding( + padding: const EdgeInsets.all(8.0), + child: TextFormField( + style: textStyle, + decoration: textFieldDecoration ?? + InputDecoration( + label: label, + hintText: hintText, + suffix: suffix, + ), + controller: textController, + obscureText: hidden ?? obscureText, + onChanged: (v) { + value = v; + onChange?.call(value); + }, + validator: (value) { + for (var validator in validators) { + var output = validator(value); + if (output != null) { + return output; + } } - } - return null; - }, + return null; + }, + ), ); } } diff --git a/lib/src/registration_screen.dart b/lib/src/registration_screen.dart index 83328dd..4e8f3de 100644 --- a/lib/src/registration_screen.dart +++ b/lib/src/registration_screen.dart @@ -53,6 +53,8 @@ class RegistrationScreen extends StatelessWidget { nextButtonBuilder: registrationOptions.nextButtonBuilder, previousButtonBuilder: registrationOptions.previousButtonBuilder, customBackgroundColor: registrationOptions.backgroundColor, + titleWidget: registrationOptions.titleWidget, + loginButton: registrationOptions.loginButton, ); } }