mirror of
https://github.com/Iconica-Development/flutter_registration.git
synced 2025-05-18 21:23:43 +02:00
feat: add title widget and login button builder
This commit is contained in:
parent
f1663afa1b
commit
7012942ce5
4 changed files with 67 additions and 47 deletions
|
@ -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<void> Function(), String)? nextButtonBuilder;
|
||||
final Widget? Function(VoidCallback, String)? previousButtonBuilder;
|
||||
final Widget? titleWidget;
|
||||
final Widget? loginButton;
|
||||
|
||||
@override
|
||||
State<AuthScreen> createState() => _AuthScreenState();
|
||||
|
@ -114,38 +118,40 @@ class _AuthScreenState extends State<AuthScreen> {
|
|||
children: <Widget>[
|
||||
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<AuthScreen> {
|
|||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
if (widget.loginButton != null)
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: widget.loginButton!,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
|
|
|
@ -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<AuthStep> getDefaultSteps({
|
||||
TextEditingController? emailController,
|
||||
|
|
|
@ -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;
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,8 @@ class RegistrationScreen extends StatelessWidget {
|
|||
nextButtonBuilder: registrationOptions.nextButtonBuilder,
|
||||
previousButtonBuilder: registrationOptions.previousButtonBuilder,
|
||||
customBackgroundColor: registrationOptions.backgroundColor,
|
||||
titleWidget: registrationOptions.titleWidget,
|
||||
loginButton: registrationOptions.loginButton,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue