flutter_login_widget/lib/src/config/login_options.dart

137 lines
3.5 KiB
Dart
Raw Normal View History

import 'dart:async';
import 'package:flutter/material.dart';
2022-10-27 15:57:54 +02:00
import 'package:flutter_login/src/service/login_validation.dart';
2022-09-29 17:22:26 +02:00
import 'package:flutter_login/src/service/validation.dart';
class LoginOptions {
const LoginOptions({
this.image,
this.title,
this.subtitle,
this.emailLabel,
this.passwordLabel,
this.emailInputPrefix,
this.passwordInputPrefix,
this.decoration = const InputDecoration(),
this.initialEmail = '',
this.initialPassword = '',
this.translations = const LoginTranslations(),
2022-09-29 17:22:26 +02:00
this.validationService,
this.loginButtonBuilder = _createLoginButton,
this.forgotPasswordButtonBuilder = _createForgotPasswordButton,
2022-09-29 17:22:26 +02:00
this.requestForgotPasswordButtonBuilder =
_createRequestForgotPasswordButton,
this.registrationButtonBuilder = _createRegisterButton,
this.emailInputContainerBuilder = _createEmailInputContainer,
this.passwordInputContainerBuilder = _createPasswordInputContainer,
});
final ButtonBuilder loginButtonBuilder;
final ButtonBuilder registrationButtonBuilder;
final ButtonBuilder forgotPasswordButtonBuilder;
2022-09-29 17:22:26 +02:00
final ButtonBuilder requestForgotPasswordButtonBuilder;
final InputContainerBuilder emailInputContainerBuilder;
final InputContainerBuilder passwordInputContainerBuilder;
final Widget? image;
final Widget? title;
final Widget? subtitle;
final Widget? emailLabel;
final Widget? passwordLabel;
final Widget? emailInputPrefix;
final Widget? passwordInputPrefix;
final InputDecoration decoration;
final String initialEmail;
final String initialPassword;
final LoginTranslations translations;
2022-09-29 17:22:26 +02:00
final ValidationService? validationService;
ValidationService get validations =>
validationService ?? LoginValidationService(this);
}
class LoginTranslations {
const LoginTranslations({
this.emailEmpty = 'Email is required',
this.passwordEmpty = 'Password is required',
this.emailInvalid = 'Enter a valid email address',
});
final String emailInvalid;
final String emailEmpty;
final String passwordEmpty;
}
Widget _createEmailInputContainer(Widget child) => child;
Widget _createPasswordInputContainer(Widget child) => child;
Widget _createLoginButton(
BuildContext context,
OptionalAsyncCallback onPressed,
bool disabled,
) {
return Opacity(
opacity: disabled ? 0.5 : 1.0,
child: ElevatedButton(
onPressed: onPressed,
child: const Text('Login'),
),
);
}
Widget _createForgotPasswordButton(
BuildContext context,
OptionalAsyncCallback onPressed,
bool disabled,
) {
return Opacity(
opacity: disabled ? 0.5 : 1.0,
child: TextButton(
onPressed: onPressed,
child: const Text('Forgot password?'),
),
);
}
2022-09-29 17:22:26 +02:00
Widget _createRequestForgotPasswordButton(
BuildContext context,
OptionalAsyncCallback onPressed,
bool disabled,
) {
return Opacity(
opacity: disabled ? 0.5 : 1.0,
child: TextButton(
onPressed: onPressed,
child: const Text('Send request'),
),
);
}
Widget _createRegisterButton(
BuildContext context,
OptionalAsyncCallback onPressed,
bool disabled,
) {
return Opacity(
opacity: disabled ? 0.5 : 1.0,
child: TextButton(
onPressed: onPressed,
child: const Text('Create Account'),
),
);
}
typedef ButtonBuilder = Widget Function(
BuildContext context,
OptionalAsyncCallback onPressed,
bool isDisabled,
);
typedef InputContainerBuilder = Widget Function(
Widget child,
);
typedef OptionalAsyncCallback = FutureOr<void> Function();