Merge pull request #2 from Iconica-Development/feature/container-builders-for-form-fields

feat: container builders for form fields
This commit is contained in:
FlutterJoey 2022-09-29 15:56:15 +02:00 committed by GitHub
commit 015a6d5f14
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 30 deletions

View file

@ -18,11 +18,15 @@ class LoginOptions {
this.loginButtonBuilder = _createLoginButton, this.loginButtonBuilder = _createLoginButton,
this.forgotPasswordButtonBuilder = _createForgotPasswordButton, this.forgotPasswordButtonBuilder = _createForgotPasswordButton,
this.registrationButtonBuilder = _createRegisterButton, this.registrationButtonBuilder = _createRegisterButton,
this.emailInputContainerBuilder = _createEmailInputContainer,
this.passwordInputContainerBuilder = _createPasswordInputContainer,
}); });
final ButtonBuilder loginButtonBuilder; final ButtonBuilder loginButtonBuilder;
final ButtonBuilder registrationButtonBuilder; final ButtonBuilder registrationButtonBuilder;
final ButtonBuilder forgotPasswordButtonBuilder; final ButtonBuilder forgotPasswordButtonBuilder;
final InputContainerBuilder emailInputContainerBuilder;
final InputContainerBuilder passwordInputContainerBuilder;
final Widget? image; final Widget? image;
final Widget? title; final Widget? title;
@ -49,6 +53,10 @@ class LoginTranslations {
final String passwordEmpty; final String passwordEmpty;
} }
Widget _createEmailInputContainer(Widget child) => child;
Widget _createPasswordInputContainer(Widget child) => child;
Widget _createLoginButton( Widget _createLoginButton(
BuildContext context, BuildContext context,
OptionalAsyncCallback onPressed, OptionalAsyncCallback onPressed,
@ -97,4 +105,8 @@ typedef ButtonBuilder = Widget Function(
bool isDisabled, bool isDisabled,
); );
typedef InputContainerBuilder = Widget Function(
Widget child,
);
typedef OptionalAsyncCallback = FutureOr<void> Function(); typedef OptionalAsyncCallback = FutureOr<void> Function();

View file

@ -125,39 +125,43 @@ class _EmailPasswordLoginFormState extends State<EmailPasswordLoginForm> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
TextFormField( options.emailInputContainerBuilder(
onChanged: _updateCurrentEmail, TextFormField(
validator: _validateEmail, onChanged: _updateCurrentEmail,
initialValue: options.initialEmail, validator: _validateEmail,
keyboardType: TextInputType.emailAddress, initialValue: options.initialEmail,
textInputAction: TextInputAction.next, keyboardType: TextInputType.emailAddress,
decoration: options.decoration.copyWith( textInputAction: TextInputAction.next,
prefixIcon: options.emailInputPrefix, decoration: options.decoration.copyWith(
label: options.emailLabel, prefixIcon: options.emailInputPrefix,
label: options.emailLabel,
),
), ),
), ),
const SizedBox(height: 24), const SizedBox(height: 24),
TextFormField( options.passwordInputContainerBuilder(
obscureText: _obscurePassword, TextFormField(
onChanged: _updateCurrentPassword, obscureText: _obscurePassword,
validator: _validatePassword, onChanged: _updateCurrentPassword,
initialValue: options.initialPassword, validator: _validatePassword,
keyboardType: TextInputType.visiblePassword, initialValue: options.initialPassword,
textInputAction: TextInputAction.done, keyboardType: TextInputType.visiblePassword,
onFieldSubmitted: (_) => _handleLogin(), textInputAction: TextInputAction.done,
decoration: options.decoration.copyWith( onFieldSubmitted: (_) => _handleLogin(),
label: options.passwordLabel, decoration: options.decoration.copyWith(
prefixIcon: options.passwordInputPrefix, label: options.passwordLabel,
suffixIcon: IconButton( prefixIcon: options.passwordInputPrefix,
onPressed: () { suffixIcon: IconButton(
setState(() { onPressed: () {
_obscurePassword = !_obscurePassword; setState(() {
}); _obscurePassword = !_obscurePassword;
}, });
icon: Icon( },
_obscurePassword icon: Icon(
? Icons.visibility _obscurePassword
: Icons.visibility_off, ? Icons.visibility
: Icons.visibility_off,
),
), ),
), ),
), ),