From f1d5ec5db9551355f4baad6a8adb16982793e880 Mon Sep 17 00:00:00 2001 From: Stein Milder Date: Thu, 29 Sep 2022 12:14:30 +0200 Subject: [PATCH] feat: container builders for form fields --- lib/src/config/login_options.dart | 12 +++++ lib/src/widgets/email_password_login.dart | 64 ++++++++++++----------- 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/lib/src/config/login_options.dart b/lib/src/config/login_options.dart index d1a1476..d8542f7 100644 --- a/lib/src/config/login_options.dart +++ b/lib/src/config/login_options.dart @@ -18,11 +18,15 @@ class LoginOptions { this.loginButtonBuilder = _createLoginButton, this.forgotPasswordButtonBuilder = _createForgotPasswordButton, this.registrationButtonBuilder = _createRegisterButton, + this.emailInputContainerBuilder = _createEmailInputContainer, + this.passwordInputContainerBuilder = _createPasswordInputContainer, }); final ButtonBuilder loginButtonBuilder; final ButtonBuilder registrationButtonBuilder; final ButtonBuilder forgotPasswordButtonBuilder; + final InputContainerBuilder emailInputContainerBuilder; + final InputContainerBuilder passwordInputContainerBuilder; final Widget? image; final Widget? title; @@ -49,6 +53,10 @@ class LoginTranslations { final String passwordEmpty; } +Widget _createEmailInputContainer(Widget child) => child; + +Widget _createPasswordInputContainer(Widget child) => child; + Widget _createLoginButton( BuildContext context, OptionalAsyncCallback onPressed, @@ -97,4 +105,8 @@ typedef ButtonBuilder = Widget Function( bool isDisabled, ); +typedef InputContainerBuilder = Widget Function( + Widget child, +); + typedef OptionalAsyncCallback = FutureOr Function(); diff --git a/lib/src/widgets/email_password_login.dart b/lib/src/widgets/email_password_login.dart index 7d406b9..bf89a08 100644 --- a/lib/src/widgets/email_password_login.dart +++ b/lib/src/widgets/email_password_login.dart @@ -125,39 +125,43 @@ class _EmailPasswordLoginFormState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - TextFormField( - onChanged: _updateCurrentEmail, - validator: _validateEmail, - initialValue: options.initialEmail, - keyboardType: TextInputType.emailAddress, - textInputAction: TextInputAction.next, - decoration: options.decoration.copyWith( - prefixIcon: options.emailInputPrefix, - label: options.emailLabel, + options.emailInputContainerBuilder( + TextFormField( + onChanged: _updateCurrentEmail, + validator: _validateEmail, + initialValue: options.initialEmail, + keyboardType: TextInputType.emailAddress, + textInputAction: TextInputAction.next, + decoration: options.decoration.copyWith( + prefixIcon: options.emailInputPrefix, + label: options.emailLabel, + ), ), ), const SizedBox(height: 24), - TextFormField( - obscureText: _obscurePassword, - onChanged: _updateCurrentPassword, - validator: _validatePassword, - initialValue: options.initialPassword, - keyboardType: TextInputType.visiblePassword, - textInputAction: TextInputAction.done, - onFieldSubmitted: (_) => _handleLogin(), - decoration: options.decoration.copyWith( - label: options.passwordLabel, - prefixIcon: options.passwordInputPrefix, - suffixIcon: IconButton( - onPressed: () { - setState(() { - _obscurePassword = !_obscurePassword; - }); - }, - icon: Icon( - _obscurePassword - ? Icons.visibility - : Icons.visibility_off, + options.passwordInputContainerBuilder( + TextFormField( + obscureText: _obscurePassword, + onChanged: _updateCurrentPassword, + validator: _validatePassword, + initialValue: options.initialPassword, + keyboardType: TextInputType.visiblePassword, + textInputAction: TextInputAction.done, + onFieldSubmitted: (_) => _handleLogin(), + decoration: options.decoration.copyWith( + label: options.passwordLabel, + prefixIcon: options.passwordInputPrefix, + suffixIcon: IconButton( + onPressed: () { + setState(() { + _obscurePassword = !_obscurePassword; + }); + }, + icon: Icon( + _obscurePassword + ? Icons.visibility + : Icons.visibility_off, + ), ), ), ),