From a31ed74f180cc8afb49917c48c048d80cd373a3e Mon Sep 17 00:00:00 2001 From: jayjayesh Date: Tue, 12 May 2026 20:48:47 +0530 Subject: [PATCH 1/2] fix: comment out push trigger in Flutter CI workflow --- .github/workflows/flutter-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/flutter-ci.yml b/.github/workflows/flutter-ci.yml index 14f6519..20a17d3 100644 --- a/.github/workflows/flutter-ci.yml +++ b/.github/workflows/flutter-ci.yml @@ -1,9 +1,9 @@ name: Flutter CI on: - push: - branches: - - main + # push: + # branches: + # - main pull_request: branches: - main From 20a2d1aed5e5e898782a150208ea97b24de37db3 Mon Sep 17 00:00:00 2001 From: jayjayesh Date: Tue, 12 May 2026 21:31:33 +0530 Subject: [PATCH 2/2] feat: add focus nodes and text input actions for login and signup screens --- .../presentation/screens/login_screen.dart | 9 +++++++ .../presentation/screens/signup_screen.dart | 25 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/frontend/instagramflutterapp/lib/src/features/auth/presentation/screens/login_screen.dart b/frontend/instagramflutterapp/lib/src/features/auth/presentation/screens/login_screen.dart index 0edf590..e81877b 100644 --- a/frontend/instagramflutterapp/lib/src/features/auth/presentation/screens/login_screen.dart +++ b/frontend/instagramflutterapp/lib/src/features/auth/presentation/screens/login_screen.dart @@ -17,6 +17,7 @@ class _LoginScreenState extends ConsumerState { late GlobalKey formKey; late TextEditingController emailController; late TextEditingController passwordController; + late FocusNode passwordFocusNode; bool obscurePassword = true; bool rememberMe = true; final showSocialMediaSignin = false; @@ -27,6 +28,7 @@ class _LoginScreenState extends ConsumerState { formKey = GlobalKey(); emailController = TextEditingController(); passwordController = TextEditingController(); + passwordFocusNode = FocusNode(); _loadRememberedLogin(); } @@ -34,6 +36,7 @@ class _LoginScreenState extends ConsumerState { void dispose() { emailController.dispose(); passwordController.dispose(); + passwordFocusNode.dispose(); super.dispose(); } @@ -142,6 +145,7 @@ class _LoginScreenState extends ConsumerState { enabled: !isLoading, label: 'auth.email'.tr(), prefixIcon: const Icon(Icons.email_outlined), + textInputAction: TextInputAction.next, validator: (v) { final email = v?.trim(); @@ -153,10 +157,15 @@ class _LoginScreenState extends ConsumerState { } return null; }, + onFieldSubmitted: (value) { + passwordFocusNode.requestFocus(); + }, ), SizedBox(height: AppSpacing.md), AppTextField( controller: passwordController, + focusNode: passwordFocusNode, + textInputAction: TextInputAction.done, enabled: !isLoading, label: 'auth.password'.tr(), obscureText: obscurePassword, diff --git a/frontend/instagramflutterapp/lib/src/features/auth/presentation/screens/signup_screen.dart b/frontend/instagramflutterapp/lib/src/features/auth/presentation/screens/signup_screen.dart index de860c2..d61a213 100644 --- a/frontend/instagramflutterapp/lib/src/features/auth/presentation/screens/signup_screen.dart +++ b/frontend/instagramflutterapp/lib/src/features/auth/presentation/screens/signup_screen.dart @@ -16,6 +16,9 @@ class _SignupScreenState extends ConsumerState { late TextEditingController emailController; late TextEditingController passwordController; late TextEditingController confirmPasswordController; + late FocusNode emailFocusNode; + late FocusNode passwordFocusNode; + late FocusNode confirmPasswordFocusNode; bool obscurePassword = true; bool obscureConfirmPassword = true; final showSocialMediaSignin = false; @@ -28,6 +31,9 @@ class _SignupScreenState extends ConsumerState { emailController = TextEditingController(); passwordController = TextEditingController(); confirmPasswordController = TextEditingController(); + emailFocusNode = FocusNode(); + passwordFocusNode = FocusNode(); + confirmPasswordFocusNode = FocusNode(); } @override @@ -36,6 +42,9 @@ class _SignupScreenState extends ConsumerState { emailController.dispose(); passwordController.dispose(); confirmPasswordController.dispose(); + emailFocusNode.dispose(); + passwordFocusNode.dispose(); + confirmPasswordFocusNode.dispose(); super.dispose(); } @@ -102,17 +111,23 @@ class _SignupScreenState extends ConsumerState { enabled: !isLoading, label: 'auth.name'.tr(), prefixIcon: const Icon(Icons.person_outline), + textInputAction: TextInputAction.next, validator: (v) => AppUtils.isBlank(v?.trim()) ? 'auth.name_required'.tr() : null, + onFieldSubmitted: (value) { + emailFocusNode.requestFocus(); + }, ), SizedBox(height: AppSpacing.md), AppTextField( controller: emailController, + focusNode: emailFocusNode, enabled: !isLoading, keyboardType: TextInputType.emailAddress, label: 'auth.email'.tr(), prefixIcon: const Icon(Icons.email_outlined), + textInputAction: TextInputAction.next, validator: (v) { final email = v?.trim(); @@ -124,13 +139,18 @@ class _SignupScreenState extends ConsumerState { } return null; }, + onFieldSubmitted: (value) { + passwordFocusNode.requestFocus(); + }, ), SizedBox(height: AppSpacing.md), AppTextField( controller: passwordController, + focusNode: passwordFocusNode, enabled: !isLoading, label: 'auth.password'.tr(), obscureText: obscurePassword, + textInputAction: TextInputAction.next, prefixIcon: const Icon(Icons.lock_outline), suffixIcon: IconButton( icon: Icon( @@ -153,13 +173,18 @@ class _SignupScreenState extends ConsumerState { } return null; }, + onFieldSubmitted: (value) { + confirmPasswordFocusNode.requestFocus(); + }, ), SizedBox(height: AppSpacing.md), AppTextField( controller: confirmPasswordController, + focusNode: confirmPasswordFocusNode, enabled: !isLoading, label: 'auth.confirm_password'.tr(), obscureText: obscureConfirmPassword, + textInputAction: TextInputAction.done, prefixIcon: const Icon(Icons.lock_outline), suffixIcon: IconButton( icon: Icon(