From 27bfde8f9574cdcf28262e9ef19d6df6be5a457d Mon Sep 17 00:00:00 2001 From: cogwheel0 <172976095+cogwheel0@users.noreply.github.com> Date: Sun, 19 Oct 2025 21:10:10 +0530 Subject: [PATCH] refactor: Enhance onboarding process in chat and app startup providers - Integrated autofocus management for the composer in both chat and onboarding contexts to improve user experience. - Added error handling for focus management to ensure smooth onboarding transitions. - Updated modal bottom sheet handling to restore autofocus state after onboarding completion, enhancing usability across the app. --- lib/core/providers/app_startup_providers.dart | 16 +++++++++++++++- lib/features/chat/views/chat_page.dart | 15 ++++++++++++++- lib/shared/theme/theme_extensions.dart | 2 +- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/core/providers/app_startup_providers.dart b/lib/core/providers/app_startup_providers.dart index 2d7dbbe..aecdd7b 100644 --- a/lib/core/providers/app_startup_providers.dart +++ b/lib/core/providers/app_startup_providers.dart @@ -14,6 +14,7 @@ import '../services/background_streaming_handler.dart'; import '../services/persistent_streaming_service.dart'; import '../services/socket_service.dart'; import '../../features/onboarding/views/onboarding_sheet.dart'; +import '../../features/chat/providers/chat_providers.dart'; import '../../shared/theme/theme_extensions.dart'; import '../services/connectivity_service.dart'; import '../utils/debug_logger.dart'; @@ -534,8 +535,16 @@ Future _maybeShowOnboarding(Ref ref) async { final navContext = NavigationService.navigatorKey.currentContext; if (navContext == null) return; + try { + ref.read(composerAutofocusEnabledProvider.notifier).set(false); + } catch (_) {} + try { + FocusManager.instance.primaryFocus?.unfocus(); + SystemChannels.textInput.invokeMethod('TextInput.hide'); + } catch (_) {} + // Show onboarding sheet - showModalBottomSheet( + final sheetFuture = showModalBottomSheet( context: navContext, backgroundColor: Colors.transparent, isScrollControlled: true, @@ -550,6 +559,11 @@ Future _maybeShowOnboarding(Ref ref) async { child: const OnboardingSheet(), ), ); + sheetFuture.whenComplete(() { + try { + ref.read(composerAutofocusEnabledProvider.notifier).set(true); + } catch (_) {} + }); await storage.setOnboardingSeen(true); }); diff --git a/lib/features/chat/views/chat_page.dart b/lib/features/chat/views/chat_page.dart index 4043f48..e51f922 100644 --- a/lib/features/chat/views/chat_page.dart +++ b/lib/features/chat/views/chat_page.dart @@ -190,6 +190,14 @@ class _ChatPageState extends ConsumerState { } void _showOnboarding() { + try { + ref.read(composerAutofocusEnabledProvider.notifier).set(false); + } catch (_) {} + try { + FocusManager.instance.primaryFocus?.unfocus(); + SystemChannels.textInput.invokeMethod('TextInput.hide'); + } catch (_) {} + showModalBottomSheet( context: context, backgroundColor: Colors.transparent, @@ -204,7 +212,12 @@ class _ChatPageState extends ConsumerState { ), child: const OnboardingSheet(), ), - ); + ).whenComplete(() { + if (!mounted) return; + try { + ref.read(composerAutofocusEnabledProvider.notifier).set(true); + } catch (_) {} + }); } Future _checkAndLoadDemoConversation() async { diff --git a/lib/shared/theme/theme_extensions.dart b/lib/shared/theme/theme_extensions.dart index 2b42c00..0c66c1d 100644 --- a/lib/shared/theme/theme_extensions.dart +++ b/lib/shared/theme/theme_extensions.dart @@ -62,7 +62,7 @@ class ConduitThemeExtension extends ThemeExtension { Color get inputBorderFocused => surfaces.ring; Color get inputText => tokens.neutralOnSurface; Color get inputPlaceholder => - isDark ? tokens.neutralTone80 : tokens.neutralTone60; + isDark ? tokens.neutralTone60 : tokens.neutralTone60; Color get inputError => tokens.statusError60; Color get cardBackground => surfaces.card;