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.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<void> Function();

View file

@ -125,39 +125,43 @@ class _EmailPasswordLoginFormState extends State<EmailPasswordLoginForm> {
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,
),
),
),
),