Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding text editing controllers for email and password in signInScreen #374

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ class LoginScreen extends StatelessWidget {
/// {@macro ui.auth.screens.responsive_page.max_width}
final double? maxWidth;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? emailTextEditingController;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? passwordTextEditingController;

const LoginScreen({
super.key,
required this.action,
Expand All @@ -77,6 +85,8 @@ class LoginScreen extends StatelessWidget {
this.styles,
this.showPasswordVisibilityToggle = false,
this.maxWidth,
this.emailTextEditingController,
this.passwordTextEditingController,
});

@override
Expand All @@ -86,6 +96,8 @@ class LoginScreen extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.all(30),
child: LoginView(
emailTextEditingController: emailTextEditingController,
passwordTextEditingController: passwordTextEditingController,
key: loginViewKey,
action: action,
auth: auth,
Expand Down
12 changes: 12 additions & 0 deletions packages/firebase_ui_auth/lib/src/screens/sign_in_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,21 @@ class SignInScreen extends MultiProviderScreen {
/// {@macro ui.auth.screens.responsive_page.max_width}
final double? maxWidth;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? emailTextEditingController;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? passwordTextEditingController;

/// {@macro ui.auth.screens.sign_in_screen}
const SignInScreen({
super.key,
super.providers,
super.auth,
this.emailTextEditingController,
this.passwordTextEditingController,
this.headerMaxExtent,
this.headerBuilder,
this.sideBuilder,
Expand Down Expand Up @@ -161,6 +171,8 @@ class SignInScreen extends MultiProviderScreen {
actions: actions,
child: LoginScreen(
styles: styles,
emailTextEditingController: emailTextEditingController,
passwordTextEditingController: passwordTextEditingController,
loginViewKey: loginViewKey,
action: AuthAction.signIn,
providers: providers,
Expand Down
12 changes: 12 additions & 0 deletions packages/firebase_ui_auth/lib/src/views/login_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ class LoginView extends StatefulWidget {
/// {@macro ui.auth.widgets.email_from.showPasswordVisibilityToggle}
final bool showPasswordVisibilityToggle;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? emailTextEditingController;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? passwordTextEditingController;

/// {@macro ui.auth.views.login_view}
const LoginView({
super.key,
Expand All @@ -72,6 +80,8 @@ class LoginView extends StatefulWidget {
this.subtitleBuilder,
this.actionButtonLabelOverride,
this.showPasswordVisibilityToggle = false,
this.emailTextEditingController,
this.passwordTextEditingController,
});

@override
Expand Down Expand Up @@ -220,6 +230,8 @@ class _LoginViewState extends State<LoginView> {
if (provider is EmailAuthProvider) ...[
const SizedBox(height: 8),
EmailForm(
passwordTextEditingController: widget.passwordTextEditingController,
emailTextEditingController: widget.emailTextEditingController,
key: ValueKey(_action),
auth: widget.auth,
action: _action,
Expand Down
34 changes: 32 additions & 2 deletions packages/firebase_ui_auth/lib/src/widgets/email_form.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ class EmailForm extends StatelessWidget {
/// A label that would be used for the "Sign in" button.
final String? actionButtonLabelOverride;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? emailTextEditingController;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? passwordTextEditingController;

/// An object that is being used to apply styling configuration to the email
/// form.
///
Expand Down Expand Up @@ -140,6 +148,8 @@ class EmailForm extends StatelessWidget {
const EmailForm({
super.key,
this.action,
this.emailTextEditingController,
this.passwordTextEditingController,
this.auth,
this.provider,
this.onSubmit,
Expand All @@ -160,6 +170,8 @@ class EmailForm extends StatelessWidget {
actionButtonLabelOverride: actionButtonLabelOverride,
style: style,
showPasswordVisibilityToggle: showPasswordVisibilityToggle,
emailTextEditingController: emailTextEditingController,
passwordTextEditingController: passwordTextEditingController,
);

return AuthFlowBuilder<EmailAuthController>(
Expand All @@ -186,6 +198,14 @@ class _SignInFormContent extends StatefulWidget {

final EmailFormStyle? style;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? emailTextEditingController;

/// {@macro ui.auth.screens.sign_in_screen}
/// Email text editing controller
final TextEditingController? passwordTextEditingController;

const _SignInFormContent({
this.auth,
this.onSubmit,
Expand All @@ -195,22 +215,32 @@ class _SignInFormContent extends StatefulWidget {
this.actionButtonLabelOverride,
this.style,
this.showPasswordVisibilityToggle = false,
this.emailTextEditingController,
this.passwordTextEditingController,
});

@override
_SignInFormContentState createState() => _SignInFormContentState();
}

class _SignInFormContentState extends State<_SignInFormContent> {
final emailCtrl = TextEditingController();
final passwordCtrl = TextEditingController();
late final TextEditingController emailCtrl;
late final TextEditingController passwordCtrl;
final confirmPasswordCtrl = TextEditingController();
final formKey = GlobalKey<FormState>();

final emailFocusNode = FocusNode();
final passwordFocusNode = FocusNode();
final confirmPasswordFocusNode = FocusNode();

@override
void initState() {
emailCtrl = widget.emailTextEditingController ?? TextEditingController();
passwordCtrl =
widget.passwordTextEditingController ?? TextEditingController();
super.initState();
}

String _chooseButtonLabel() {
final ctrl = AuthController.ofType<EmailAuthController>(context);
final l = FirebaseUILocalizations.labelsOf(context);
Expand Down
Loading