feat: add title widget and login button builder

This commit is contained in:
FahadFahim71 2024-02-02 22:18:03 +01:00
parent f1663afa1b
commit 7012942ce5
4 changed files with 67 additions and 47 deletions

View file

@ -19,6 +19,8 @@ class AuthScreen extends StatefulWidget {
this.customBackgroundColor, this.customBackgroundColor,
this.nextButtonBuilder, this.nextButtonBuilder,
this.previousButtonBuilder, this.previousButtonBuilder,
this.titleWidget,
this.loginButton,
super.key, super.key,
}) : assert(steps.length > 0, 'At least one step is required'); }) : assert(steps.length > 0, 'At least one step is required');
@ -35,6 +37,8 @@ class AuthScreen extends StatefulWidget {
final Color? customBackgroundColor; final Color? customBackgroundColor;
final Widget Function(Future<void> Function(), String)? nextButtonBuilder; final Widget Function(Future<void> Function(), String)? nextButtonBuilder;
final Widget? Function(VoidCallback, String)? previousButtonBuilder; final Widget? Function(VoidCallback, String)? previousButtonBuilder;
final Widget? titleWidget;
final Widget? loginButton;
@override @override
State<AuthScreen> createState() => _AuthScreenState(); State<AuthScreen> createState() => _AuthScreenState();
@ -114,38 +118,40 @@ class _AuthScreenState extends State<AuthScreen> {
children: <Widget>[ children: <Widget>[
for (AuthStep step in widget.steps) for (AuthStep step in widget.steps)
Column( Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween, // mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
// Text(widget.title),
if (widget.titleWidget != null) widget.titleWidget!,
const SizedBox(height: 40),
Flexible( Flexible(
child: Center( child: ListView(
child: ListView( physics: const ClampingScrollPhysics(),
physics: const ClampingScrollPhysics(), shrinkWrap: true,
shrinkWrap: true, padding: const EdgeInsets.symmetric(
padding: const EdgeInsets.symmetric( vertical: 8.0,
vertical: 8.0, horizontal: 30.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(),
],
),
)
],
), ),
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(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
top: 15.0, top: 15.0,
bottom: 30.0, // bottom: 30.0,
left: 30.0, left: 30.0,
right: 30.0, right: 30.0,
), ),
@ -209,7 +215,12 @@ class _AuthScreenState extends State<AuthScreen> {
), ),
], ],
), ),
) ),
if (widget.loginButton != null)
Padding(
padding: const EdgeInsets.all(8.0),
child: widget.loginButton!,
),
], ],
), ),
], ],

View file

@ -18,6 +18,8 @@ class RegistrationOptions {
this.nextButtonBuilder, this.nextButtonBuilder,
this.previousButtonBuilder, this.previousButtonBuilder,
this.backgroundColor, this.backgroundColor,
this.titleWidget,
this.loginButton,
}); });
final RegistrationTranslations registrationTranslations; final RegistrationTranslations registrationTranslations;
@ -31,6 +33,8 @@ class RegistrationOptions {
final Widget? Function(VoidCallback onPressed, String label)? final Widget? Function(VoidCallback onPressed, String label)?
previousButtonBuilder; previousButtonBuilder;
final Color? backgroundColor; final Color? backgroundColor;
Widget? titleWidget;
Widget? loginButton;
static List<AuthStep> getDefaultSteps({ static List<AuthStep> getDefaultSteps({
TextEditingController? emailController, TextEditingController? emailController,

View file

@ -57,30 +57,33 @@ class AuthTextField extends AuthField {
} }
} }
return TextFormField( return Padding(
style: textStyle, padding: const EdgeInsets.all(8.0),
decoration: textFieldDecoration ?? child: TextFormField(
InputDecoration( style: textStyle,
label: label, decoration: textFieldDecoration ??
hintText: hintText, InputDecoration(
suffix: suffix, label: label,
), hintText: hintText,
controller: textController, suffix: suffix,
obscureText: hidden ?? obscureText, ),
onChanged: (v) { controller: textController,
value = v; obscureText: hidden ?? obscureText,
onChange?.call(value); onChanged: (v) {
}, value = v;
validator: (value) { onChange?.call(value);
for (var validator in validators) { },
var output = validator(value); validator: (value) {
if (output != null) { for (var validator in validators) {
return output; var output = validator(value);
if (output != null) {
return output;
}
} }
}
return null; return null;
}, },
),
); );
} }
} }

View file

@ -53,6 +53,8 @@ class RegistrationScreen extends StatelessWidget {
nextButtonBuilder: registrationOptions.nextButtonBuilder, nextButtonBuilder: registrationOptions.nextButtonBuilder,
previousButtonBuilder: registrationOptions.previousButtonBuilder, previousButtonBuilder: registrationOptions.previousButtonBuilder,
customBackgroundColor: registrationOptions.backgroundColor, customBackgroundColor: registrationOptions.backgroundColor,
titleWidget: registrationOptions.titleWidget,
loginButton: registrationOptions.loginButton,
); );
} }
} }