mirror of
https://github.com/Iconica-Development/flutter_login_widget.git
synced 2025-05-19 13:43:44 +02:00
feat(EmailPasswordLoginForm): get title and subtitle from the widget rather than loginoptions
Previously the EmailPasswordLoginForm and the ForgotPasswordForm used different ways to provide a title and subtitle/description. This is now the same and the related fields are removed from LoginOptions
This commit is contained in:
parent
7be44f21d5
commit
907af2639d
5 changed files with 31 additions and 38 deletions
|
@ -12,7 +12,6 @@ final loginOptions = LoginOptions(
|
||||||
prefixIcon: Icon(Icons.password),
|
prefixIcon: Icon(Icons.password),
|
||||||
border: OutlineInputBorder(),
|
border: OutlineInputBorder(),
|
||||||
),
|
),
|
||||||
title: const Text('Login Demo'),
|
|
||||||
image: const FlutterLogo(
|
image: const FlutterLogo(
|
||||||
size: 200,
|
size: 200,
|
||||||
),
|
),
|
||||||
|
@ -56,6 +55,7 @@ class LoginScreen extends StatelessWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: EmailPasswordLoginForm(
|
body: EmailPasswordLoginForm(
|
||||||
|
title: const Text('Login Demo'),
|
||||||
options: loginOptions,
|
options: loginOptions,
|
||||||
onLogin: (email, password) => print('$email:$password'),
|
onLogin: (email, password) => print('$email:$password'),
|
||||||
onRegister: (email, password, ctx) => print('Register!'),
|
onRegister: (email, password, ctx) => print('Register!'),
|
||||||
|
|
|
@ -68,7 +68,7 @@ packages:
|
||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "6.0.0"
|
version: "6.1.0"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -83,26 +83,26 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
|
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.0"
|
version: "10.0.4"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_flutter_testing
|
name: leak_tracker_flutter_testing
|
||||||
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
|
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "3.0.3"
|
||||||
leak_tracker_testing:
|
leak_tracker_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_testing
|
name: leak_tracker_testing
|
||||||
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
|
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "3.0.1"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -131,10 +131,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
|
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.0"
|
version: "1.12.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -208,10 +208,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
|
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.1"
|
version: "0.7.0"
|
||||||
universal_platform:
|
universal_platform:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -232,10 +232,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
|
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "13.0.0"
|
version: "14.2.1"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.2.0-0 <4.0.0"
|
dart: ">=3.3.0 <4.0.0"
|
||||||
flutter: ">=3.7.0"
|
flutter: ">=3.18.0-18.0.pre.54"
|
||||||
|
|
|
@ -10,15 +10,6 @@ import 'package:flutter_login/src/service/validation.dart';
|
||||||
class LoginOptions {
|
class LoginOptions {
|
||||||
const LoginOptions({
|
const LoginOptions({
|
||||||
this.image,
|
this.image,
|
||||||
this.title = const Text(
|
|
||||||
'Log in',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Color(0xff71C6D1),
|
|
||||||
fontWeight: FontWeight.w800,
|
|
||||||
fontSize: 24,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
this.subtitle,
|
|
||||||
this.maxFormWidth,
|
this.maxFormWidth,
|
||||||
this.emailTextStyle,
|
this.emailTextStyle,
|
||||||
this.passwordTextStyle,
|
this.passwordTextStyle,
|
||||||
|
@ -106,12 +97,6 @@ class LoginOptions {
|
||||||
/// The image to display on the login screen.
|
/// The image to display on the login screen.
|
||||||
final Widget? image;
|
final Widget? image;
|
||||||
|
|
||||||
/// The title widget to display on the login screen.
|
|
||||||
final Widget? title;
|
|
||||||
|
|
||||||
/// The subtitle widget to display on the login screen.
|
|
||||||
final Widget? subtitle;
|
|
||||||
|
|
||||||
/// Option to modify the spacing between the title, subtitle, image, form,
|
/// Option to modify the spacing between the title, subtitle, image, form,
|
||||||
/// and button.
|
/// and button.
|
||||||
final LoginSpacerOptions spacers;
|
final LoginSpacerOptions spacers;
|
||||||
|
|
|
@ -6,6 +6,8 @@ import 'package:flutter_login/flutter_login.dart';
|
||||||
class EmailPasswordLoginForm extends StatefulWidget {
|
class EmailPasswordLoginForm extends StatefulWidget {
|
||||||
/// Constructs an [EmailPasswordLoginForm] widget.
|
/// Constructs an [EmailPasswordLoginForm] widget.
|
||||||
///
|
///
|
||||||
|
/// [title]: The title to display above the form.
|
||||||
|
/// [subtitle]: A subtitle to display below the title.
|
||||||
/// [onLogin]: Callback function for user login.
|
/// [onLogin]: Callback function for user login.
|
||||||
/// [onForgotPassword]: Callback function for when the user
|
/// [onForgotPassword]: Callback function for when the user
|
||||||
/// forgets their password.
|
/// forgets their password.
|
||||||
|
@ -13,13 +15,19 @@ class EmailPasswordLoginForm extends StatefulWidget {
|
||||||
/// [options]: The options for configuring the login form.
|
/// [options]: The options for configuring the login form.
|
||||||
const EmailPasswordLoginForm({
|
const EmailPasswordLoginForm({
|
||||||
required this.onLogin,
|
required this.onLogin,
|
||||||
super.key,
|
this.title,
|
||||||
|
this.subtitle,
|
||||||
this.onForgotPassword,
|
this.onForgotPassword,
|
||||||
this.onRegister,
|
this.onRegister,
|
||||||
this.options = const LoginOptions(),
|
this.options = const LoginOptions(),
|
||||||
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
final LoginOptions options;
|
final LoginOptions options;
|
||||||
|
|
||||||
|
final Widget? title;
|
||||||
|
final Widget? subtitle;
|
||||||
|
|
||||||
final void Function(String email, BuildContext ctx)? onForgotPassword;
|
final void Function(String email, BuildContext ctx)? onForgotPassword;
|
||||||
final FutureOr<void> Function(
|
final FutureOr<void> Function(
|
||||||
String email,
|
String email,
|
||||||
|
@ -101,11 +109,11 @@ class _EmailPasswordLoginFormState extends State<EmailPasswordLoginForm> {
|
||||||
if (options.spacers.spacerBeforeTitle != null) ...[
|
if (options.spacers.spacerBeforeTitle != null) ...[
|
||||||
Spacer(flex: options.spacers.spacerBeforeTitle!),
|
Spacer(flex: options.spacers.spacerBeforeTitle!),
|
||||||
],
|
],
|
||||||
if (options.title != null) ...[
|
if (widget.title != null) ...[
|
||||||
Align(
|
Align(
|
||||||
alignment: Alignment.topCenter,
|
alignment: Alignment.topCenter,
|
||||||
child: wrapWithDefaultStyle(
|
child: wrapWithDefaultStyle(
|
||||||
options.title,
|
widget.title,
|
||||||
theme.textTheme.headlineSmall,
|
theme.textTheme.headlineSmall,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -113,11 +121,11 @@ class _EmailPasswordLoginFormState extends State<EmailPasswordLoginForm> {
|
||||||
if (options.spacers.spacerAfterTitle != null) ...[
|
if (options.spacers.spacerAfterTitle != null) ...[
|
||||||
Spacer(flex: options.spacers.spacerAfterTitle!),
|
Spacer(flex: options.spacers.spacerAfterTitle!),
|
||||||
],
|
],
|
||||||
if (options.subtitle != null) ...[
|
if (widget.subtitle != null) ...[
|
||||||
Align(
|
Align(
|
||||||
alignment: Alignment.topCenter,
|
alignment: Alignment.topCenter,
|
||||||
child: wrapWithDefaultStyle(
|
child: wrapWithDefaultStyle(
|
||||||
options.subtitle,
|
widget.subtitle,
|
||||||
theme.textTheme.titleSmall,
|
theme.textTheme.titleSmall,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -8,16 +8,16 @@ class ForgotPasswordForm extends StatefulWidget {
|
||||||
/// Constructs a [ForgotPasswordForm] widget.
|
/// Constructs a [ForgotPasswordForm] widget.
|
||||||
///
|
///
|
||||||
/// [options]: The options for configuring the forgot password form.
|
/// [options]: The options for configuring the forgot password form.
|
||||||
/// [description]: Widget to display description.
|
|
||||||
/// [onRequestForgotPassword]: Callback function for requesting
|
/// [onRequestForgotPassword]: Callback function for requesting
|
||||||
/// password reset.
|
/// password reset.
|
||||||
/// [title]: Widget to display title.
|
/// [title]: Widget to display title.
|
||||||
|
/// [description]: Widget to display description.
|
||||||
ForgotPasswordForm({
|
ForgotPasswordForm({
|
||||||
required this.options,
|
required this.options,
|
||||||
required this.onRequestForgotPassword,
|
required this.onRequestForgotPassword,
|
||||||
|
this.title,
|
||||||
this.description,
|
this.description,
|
||||||
super.key,
|
super.key,
|
||||||
this.title,
|
|
||||||
}) {
|
}) {
|
||||||
title == null
|
title == null
|
||||||
? title = const Padding(
|
? title = const Padding(
|
||||||
|
|
Loading…
Reference in a new issue