diff --git a/packages/firebase_ui_auth/lib/src/screens/internal/login_screen.dart b/packages/firebase_ui_auth/lib/src/screens/internal/login_screen.dart index a7fc528e..0519cb0e 100644 --- a/packages/firebase_ui_auth/lib/src/screens/internal/login_screen.dart +++ b/packages/firebase_ui_auth/lib/src/screens/internal/login_screen.dart @@ -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, @@ -77,6 +85,8 @@ class LoginScreen extends StatelessWidget { this.styles, this.showPasswordVisibilityToggle = false, this.maxWidth, + this.emailTextEditingController, + this.passwordTextEditingController, }); @override @@ -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, diff --git a/packages/firebase_ui_auth/lib/src/screens/sign_in_screen.dart b/packages/firebase_ui_auth/lib/src/screens/sign_in_screen.dart index 82e6488d..e93a4a3d 100644 --- a/packages/firebase_ui_auth/lib/src/screens/sign_in_screen.dart +++ b/packages/firebase_ui_auth/lib/src/screens/sign_in_screen.dart @@ -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, @@ -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, diff --git a/packages/firebase_ui_auth/lib/src/views/login_view.dart b/packages/firebase_ui_auth/lib/src/views/login_view.dart index d81bdfb5..bc68c4b2 100644 --- a/packages/firebase_ui_auth/lib/src/views/login_view.dart +++ b/packages/firebase_ui_auth/lib/src/views/login_view.dart @@ -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, @@ -72,6 +80,8 @@ class LoginView extends StatefulWidget { this.subtitleBuilder, this.actionButtonLabelOverride, this.showPasswordVisibilityToggle = false, + this.emailTextEditingController, + this.passwordTextEditingController, }); @override @@ -220,6 +230,8 @@ class _LoginViewState extends State { if (provider is EmailAuthProvider) ...[ const SizedBox(height: 8), EmailForm( + passwordTextEditingController: widget.passwordTextEditingController, + emailTextEditingController: widget.emailTextEditingController, key: ValueKey(_action), auth: widget.auth, action: _action, diff --git a/packages/firebase_ui_auth/lib/src/widgets/email_form.dart b/packages/firebase_ui_auth/lib/src/widgets/email_form.dart index fdcadd7b..1f8f4327 100644 --- a/packages/firebase_ui_auth/lib/src/widgets/email_form.dart +++ b/packages/firebase_ui_auth/lib/src/widgets/email_form.dart @@ -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. /// @@ -140,6 +148,8 @@ class EmailForm extends StatelessWidget { const EmailForm({ super.key, this.action, + this.emailTextEditingController, + this.passwordTextEditingController, this.auth, this.provider, this.onSubmit, @@ -160,6 +170,8 @@ class EmailForm extends StatelessWidget { actionButtonLabelOverride: actionButtonLabelOverride, style: style, showPasswordVisibilityToggle: showPasswordVisibilityToggle, + emailTextEditingController: emailTextEditingController, + passwordTextEditingController: passwordTextEditingController, ); return AuthFlowBuilder( @@ -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, @@ -195,6 +215,8 @@ class _SignInFormContent extends StatefulWidget { this.actionButtonLabelOverride, this.style, this.showPasswordVisibilityToggle = false, + this.emailTextEditingController, + this.passwordTextEditingController, }); @override @@ -202,8 +224,8 @@ class _SignInFormContent extends StatefulWidget { } 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(); @@ -211,6 +233,14 @@ class _SignInFormContentState extends State<_SignInFormContent> { 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(context); final l = FirebaseUILocalizations.labelsOf(context);