diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index f6590f585..505be1940 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -117,6 +117,7 @@ class MailboxController extends BaseMailboxController { @override void onInit() { _initWorker(); + _registerSearchFocusListener(); super.onInit(); } @@ -234,6 +235,17 @@ class MailboxController extends BaseMailboxController { }); } + void _registerSearchFocusListener() { + searchFocus.addListener(() { + final hasFocus = searchFocus.hasFocus; + final query = searchQuery.value.value; + log('MailboxController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query'); + if (!hasFocus && query.isEmpty) { + disableSearch(); + } + }); + } + void _clearWorker() { accountIdWorker.call(); viewStateWorker.call(); @@ -396,13 +408,13 @@ class MailboxController extends BaseMailboxController { searchState.value = searchState.value.enableSearchState(); } - void disableSearch(BuildContext context) { + void disableSearch() { _cancelSelectMailbox(); listMailboxSearched.clear(); searchState.value = searchState.value.disableSearchState(); searchQuery.value = SearchQuery.initial(); searchInputController.clear(); - FocusScope.of(context).unfocus(); + searchFocus.unfocus(); } void clearSearchText() { diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index 2f79a8581..d70fbfb0b 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -333,7 +333,7 @@ class MailboxView extends GetWidget { return Padding( padding: EdgeInsets.only(left: _responsiveUtils.isLandscapeMobile(context) ? 0 : 5), child: buildIconWeb( - onTap: () => controller.disableSearch(context), + onTap: () => controller.disableSearch(), icon: SvgPicture.asset(_imagePaths.icBack, color: AppColor.colorTextButton), )); } diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index b757d8835..58585fe1f 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -309,7 +309,7 @@ class MailboxView extends GetWidget with AppLoaderMixin, Popu minSize: 40, splashRadius: 15, icon: SvgPicture.asset(_imagePaths.icBack, color: AppColor.colorTextButton), - onTap: () => controller.disableSearch(context)), + onTap: () => controller.disableSearch()), Expanded(child: (SearchAppBarWidget( _imagePaths, controller.searchQuery.value, diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart index dcaf1f762..24ee851a5 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart @@ -125,6 +125,7 @@ class MailboxDashBoardController extends ReloadableController { void onInit() { _registerNetworkConnectivityState(); _registerPendingEmailAddress(); + _registerSearchFocusListener(); super.onInit(); } @@ -224,6 +225,17 @@ class MailboxDashBoardController extends ReloadableController { }); } + void _registerSearchFocusListener() { + searchFocus.addListener(() { + final hasFocus = searchFocus.hasFocus; + final query = searchQuery?.value; + log('MailboxDashBoardController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query'); + if (!hasFocus && (query == null || query.isEmpty)) { + disableSearch(); + } + }); + } + void _getUserProfile() async { userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null; } @@ -300,7 +312,7 @@ class MailboxDashBoardController extends ReloadableController { searchInputController.clear(); listFilterQuickSearch.clear(); emailReceiveTimeType.value = null; - FocusManager.instance.primaryFocus?.unfocus(); + searchFocus.unfocus(); } void clearTextSearch() { @@ -309,6 +321,10 @@ class MailboxDashBoardController extends ReloadableController { searchFocus.requestFocus(); } + void onChangeTextSearch(String value) { + searchQuery = SearchQuery(value); + } + void updateTextSearch(String value) { searchInputController.text = value; } diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index c0a8cbc29..f0c924648 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -420,6 +420,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { } controller.searchEmail(context, keyword); }, + onChanged: (query) { + log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query'); + controller.onChangeTextSearch(query); + }, decoration: InputDecoration( border: InputBorder.none, focusedBorder: InputBorder.none,