From fcaedeaf55211715b9a8724857060c1623da1ac0 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 4 Aug 2022 16:04:59 +0700 Subject: [PATCH] TF-691 Hide advanced search menu overlay when click outside menu --- .../mailbox_dashboard_view_web.dart | 330 ++++++++++-------- .../thread/presentation/thread_view.dart | 330 +++++++++--------- 2 files changed, 348 insertions(+), 312 deletions(-) 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 80ed53f9d..864f39f48 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -161,10 +161,17 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { }), const SizedBox(width: 16), Obx(() => !searchController.isSearchActive() ? const Spacer() : const SizedBox.shrink()), - Obx(() => searchController.isSearchActive() - ? Expanded(child: _buildSearchForm(context)) - : PortalTarget( - visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, + Obx(() { + if (searchController.isSearchActive()) { + return Expanded(child: _buildSearchForm(context)); + } else { + return PortalTarget( + visible: searchController.isAdvancedSearchViewOpen.isTrue, + portalFollower: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => searchController.selectOpenAdvanceSearch()), + child: PortalTarget( + visible: searchController.isAdvancedSearchViewOpen.isTrue, anchor: const Aligned( follower: Alignment.topRight, target: Alignment.bottomRight, @@ -175,14 +182,19 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { widthFactor: 3, ), ), - portalFollower: responsiveUtils.isMobile(context) ? const SizedBox.shrink() : const AdvancedSearchFilterOverlay(), + portalFollower: responsiveUtils.isMobile(context) + ? const SizedBox.shrink() + : const AdvancedSearchFilterOverlay(), child: (SearchBarView(imagePaths) ..hintTextSearch(AppLocalizations.of(context).search_emails) ..maxSizeWidth(240) ..addOnOpenSearchViewAction(() => searchController.enableSearch()) ..addRightButton(IconOpenAdvancedSearchWidget(context))) .build(), - )), + ), + ); + } + }), Obx(() => !searchController.isSearchActive() ? const SizedBox(width: 16) : const SizedBox.shrink()), Obx(() => (AvatarBuilder() ..text(controller.userProfile.value?.getAvatarText() ?? '') @@ -429,166 +441,174 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { height: 45, child: PortalTarget( visible: searchController.isAdvancedSearchViewOpen.isTrue, - anchor: const Aligned( - follower: Alignment.topLeft, - target: Alignment.bottomLeft, - widthFactor: 1, - backup: Aligned( + portalFollower: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => searchController.selectOpenAdvanceSearch()), + child: PortalTarget( + visible: searchController.isAdvancedSearchViewOpen.isTrue, + anchor: const Aligned( follower: Alignment.topLeft, target: Alignment.bottomLeft, widthFactor: 1, + backup: Aligned( + follower: Alignment.topLeft, + target: Alignment.bottomLeft, + widthFactor: 1, + ), ), - ), - portalFollower: const AdvancedSearchFilterOverlay(), - child: QuickSearchInputForm( - textFieldConfiguration: QuickSearchTextFieldConfiguration( - controller: searchController.searchInputController, - autofocus: true, - enabled: searchController.isAdvancedSearchViewOpen.isFalse, - focusNode: searchController.searchFocus, - textInputAction: TextInputAction.done, - onSubmitted: (keyword) { - if (keyword.trim().isNotEmpty) { - searchController.saveRecentSearch(RecentSearch.now(keyword)); - } - controller.searchEmail(context, keyword); - }, - onChanged: (query) { - log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query'); - searchController.onChangeTextSearch(query); - }, - decoration: InputDecoration( - border: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - contentPadding: EdgeInsets.zero, - hintText: AppLocalizations.of(context).search_mail, - hintStyle: const TextStyle( - color: AppColor.colorHintSearchBar, - fontSize: 17.0), - labelStyle: const TextStyle( - color: AppColor.colorHintSearchBar, - fontSize: 17.0) - ), - leftButton: buildIconWeb( - icon: SvgPicture.asset( - imagePaths.icSearchBar, - width: 16, - height: 16, - fit: BoxFit.fill), - onTap: () { - final keyword = searchController.searchInputController.text; - if (keyword.trim().isNotEmpty) { - searchController.saveRecentSearch(RecentSearch.now(keyword)); - } - controller.searchEmail(context, keyword); - }), - clearTextButton: buildIconWeb( - icon: SvgPicture.asset( - imagePaths.icClearTextSearch, - width: 16, - height: 16, - fit: BoxFit.fill), - onTap: () { - searchController.clearTextSearch(); - }), - rightButton: IconOpenAdvancedSearchWidget(context) - ), - suggestionsBoxDecoration: QuickSearchSuggestionsBoxDecoration( - color: Colors.white, - borderRadius: const BorderRadius.all(Radius.circular(16)), - constraints: BoxConstraints( - maxWidth: responsiveUtils.isDesktop(context) - ? 556 - : double.infinity), - ), - debounceDuration: const Duration(milliseconds: 500), - listActionButton: const [ - QuickSearchFilter.hasAttachment, - QuickSearchFilter.last7Days, - QuickSearchFilter.fromMe, - ], - actionButtonBuilder: (context, filterAction) { - if (filterAction is QuickSearchFilter) { - return buildQuickSearchFilterButton(context, filterAction); - } - return const SizedBox.shrink(); - }, - buttonActionCallback: (filterAction) { - if (filterAction is QuickSearchFilter) { - controller.selectQuickSearchFilter( - quickSearchFilter: filterAction, - fromSuggestionBox: true, - ); - } - }, - listActionPadding: const EdgeInsets.only( - left: 24, right: 24, top: 20, bottom: 12), - titleHeaderRecent: Padding( - padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 8), - child: Text(AppLocalizations.of(context).recent, - style: const TextStyle(fontSize: 13.0, - color: AppColor.colorTextButtonHeaderThread, - fontWeight: FontWeight.w500) - ) - ), - buttonShowAllResult: (context, keyword) { - if (keyword is String) { - return InkWell( - onTap: () { + portalFollower: responsiveUtils.isMobile(context) + ? const SizedBox.shrink() + : const AdvancedSearchFilterOverlay(), + child: QuickSearchInputForm( + textFieldConfiguration: QuickSearchTextFieldConfiguration( + controller: searchController.searchInputController, + autofocus: true, + enabled: searchController.isAdvancedSearchViewOpen.isFalse, + focusNode: searchController.searchFocus, + textInputAction: TextInputAction.done, + onSubmitted: (keyword) { if (keyword.trim().isNotEmpty) { searchController.saveRecentSearch(RecentSearch.now(keyword)); } controller.searchEmail(context, keyword); }, - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 24, - vertical: 14), - child: Row(children: [ - Text(AppLocalizations.of(context).showingResultsFor, - style: const TextStyle(fontSize: 13.0, - color: AppColor.colorTextButtonHeaderThread, - fontWeight: FontWeight.w500) - ), - const SizedBox(width: 4), - Expanded(child: Text('"$keyword"', - style: const TextStyle( - fontSize: 13.0, - color: Colors.black, - fontWeight: FontWeight.w500))) - ]) + onChanged: (query) { + log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query'); + searchController.onChangeTextSearch(query); + }, + decoration: InputDecoration( + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + contentPadding: EdgeInsets.zero, + hintText: AppLocalizations.of(context).search_mail, + hintStyle: const TextStyle( + color: AppColor.colorHintSearchBar, + fontSize: 17.0), + labelStyle: const TextStyle( + color: AppColor.colorHintSearchBar, + fontSize: 17.0) ), - ); - } else { + leftButton: buildIconWeb( + icon: SvgPicture.asset( + imagePaths.icSearchBar, + width: 16, + height: 16, + fit: BoxFit.fill), + onTap: () { + final keyword = searchController.searchInputController.text; + if (keyword.trim().isNotEmpty) { + searchController.saveRecentSearch(RecentSearch.now(keyword)); + } + controller.searchEmail(context, keyword); + }), + clearTextButton: buildIconWeb( + icon: SvgPicture.asset( + imagePaths.icClearTextSearch, + width: 16, + height: 16, + fit: BoxFit.fill), + onTap: () { + searchController.clearTextSearch(); + }), + rightButton: IconOpenAdvancedSearchWidget(context) + ), + suggestionsBoxDecoration: QuickSearchSuggestionsBoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.all(Radius.circular(16)), + constraints: BoxConstraints( + maxWidth: responsiveUtils.isDesktop(context) + ? 556 + : double.infinity), + ), + debounceDuration: const Duration(milliseconds: 500), + listActionButton: const [ + QuickSearchFilter.hasAttachment, + QuickSearchFilter.last7Days, + QuickSearchFilter.fromMe, + ], + actionButtonBuilder: (context, filterAction) { + if (filterAction is QuickSearchFilter) { + return buildQuickSearchFilterButton(context, filterAction); + } return const SizedBox.shrink(); - } - }, - loadingBuilder: (context) => Padding( - padding: const EdgeInsets.only(bottom: 16), - child: loadingWidget, - ), - fetchRecentActionCallback: (pattern) async { - return searchController.getAllRecentSearchAction(pattern); - }, - itemRecentBuilder: (context, recent) { - return RecentSearchItemTileWidget(recent); - }, - onRecentSelected: (recent) { - searchController.searchInputController.text = recent.value; - controller.searchEmail(context, recent.value); - }, - suggestionsCallback: (pattern) async { - return controller.quickSearchEmails(); - }, - itemBuilder: (context, email) { - return EmailQuickSearchItemTileWidget( - email, controller.selectedMailbox.value); - }, - onSuggestionSelected: (presentationEmail) async { - controller.dispatchAction( - OpenEmailDetailedAction(context, presentationEmail)); - }), + }, + buttonActionCallback: (filterAction) { + if (filterAction is QuickSearchFilter) { + controller.selectQuickSearchFilter( + quickSearchFilter: filterAction, + fromSuggestionBox: true, + ); + } + }, + listActionPadding: const EdgeInsets.only( + left: 24, right: 24, top: 20, bottom: 12), + titleHeaderRecent: Padding( + padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 8), + child: Text(AppLocalizations.of(context).recent, + style: const TextStyle(fontSize: 13.0, + color: AppColor.colorTextButtonHeaderThread, + fontWeight: FontWeight.w500) + ) + ), + buttonShowAllResult: (context, keyword) { + if (keyword is String) { + return InkWell( + onTap: () { + if (keyword.trim().isNotEmpty) { + searchController.saveRecentSearch(RecentSearch.now(keyword)); + } + controller.searchEmail(context, keyword); + }, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 24, + vertical: 14), + child: Row(children: [ + Text(AppLocalizations.of(context).showingResultsFor, + style: const TextStyle(fontSize: 13.0, + color: AppColor.colorTextButtonHeaderThread, + fontWeight: FontWeight.w500) + ), + const SizedBox(width: 4), + Expanded(child: Text('"$keyword"', + style: const TextStyle( + fontSize: 13.0, + color: Colors.black, + fontWeight: FontWeight.w500))) + ]) + ), + ); + } else { + return const SizedBox.shrink(); + } + }, + loadingBuilder: (context) => Padding( + padding: const EdgeInsets.only(bottom: 16), + child: loadingWidget, + ), + fetchRecentActionCallback: (pattern) async { + return searchController.getAllRecentSearchAction(pattern); + }, + itemRecentBuilder: (context, recent) { + return RecentSearchItemTileWidget(recent); + }, + onRecentSelected: (recent) { + searchController.searchInputController.text = recent.value; + controller.searchEmail(context, recent.value); + }, + suggestionsCallback: (pattern) async { + return controller.quickSearchEmails(); + }, + itemBuilder: (context, email) { + return EmailQuickSearchItemTileWidget( + email, controller.selectedMailbox.value); + }, + onSuggestionSelected: (presentationEmail) async { + controller.dispatchAction( + OpenEmailDetailedAction(context, presentationEmail)); + }), + ), ), )), const SizedBox(width: 16), diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index d91dae5a3..ab64b9d0e 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -171,22 +171,30 @@ class ThreadView extends GetWidget with AppLoaderMixin, Widget _buildSearchFormInActive(BuildContext context) { return PortalTarget( visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, - anchor: const Aligned( - follower: Alignment.topLeft, - target: Alignment.bottomLeft, - widthFactor: 1, - backup: Aligned( + portalFollower: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => controller.searchController.selectOpenAdvanceSearch()), + child: PortalTarget( + visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, + anchor: const Aligned( follower: Alignment.topLeft, target: Alignment.bottomLeft, widthFactor: 1, + backup: Aligned( + follower: Alignment.topLeft, + target: Alignment.bottomLeft, + widthFactor: 1, + ), ), + portalFollower: _responsiveUtils.isMobile(context) + ? const SizedBox.shrink() + : const AdvancedSearchFilterOverlay(), + child: (SearchBarView(_imagePaths) + ..hintTextSearch(AppLocalizations.of(context).search_emails) + ..addOnOpenSearchViewAction(() => controller.enableSearch(context)) + ..addRightButton(IconOpenAdvancedSearchWidget(context))) + .build(), ), - portalFollower: _responsiveUtils.isMobile(context) ? const SizedBox.shrink() : const AdvancedSearchFilterOverlay(), - child: (SearchBarView(_imagePaths) - ..hintTextSearch(AppLocalizations.of(context).search_emails) - ..addOnOpenSearchViewAction(() => controller.enableSearch(context)) - ..addRightButton(IconOpenAdvancedSearchWidget(context))) - .build(), ); } @@ -206,163 +214,171 @@ class ThreadView extends GetWidget with AppLoaderMixin, height: 45, child: PortalTarget( visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, - anchor: const Aligned( - follower: Alignment.topLeft, - target: Alignment.bottomLeft, - widthFactor: 1, - backup: Aligned( + portalFollower: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => controller.searchController.selectOpenAdvanceSearch()), + child: PortalTarget( + visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, + anchor: const Aligned( follower: Alignment.topLeft, target: Alignment.bottomLeft, widthFactor: 1, + backup: Aligned( + follower: Alignment.topLeft, + target: Alignment.bottomLeft, + widthFactor: 1, + ), ), - ), - portalFollower: _responsiveUtils.isMobile(context) ? const SizedBox.shrink() : const AdvancedSearchFilterOverlay(), - child: QuickSearchInputForm( - textFieldConfiguration: QuickSearchTextFieldConfiguration( - controller: controller.searchController.searchInputController, - autofocus: true, - enabled: controller.searchController.isAdvancedSearchViewOpen.isFalse, - focusNode: controller.searchController.searchFocus, - textInputAction: TextInputAction.done, - onSubmitted: (keyword) { - if (keyword.trim().isNotEmpty) { - controller.searchController.saveRecentSearch(RecentSearch.now(keyword)); - } - controller.mailboxDashBoardController.searchEmail(context, keyword); - }, - decoration: InputDecoration( - border: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - contentPadding: EdgeInsets.zero, - hintText: AppLocalizations.of(context).search_mail, - hintStyle: const TextStyle( - color: AppColor.colorHintSearchBar, - fontSize: 17.0), - labelStyle: const TextStyle( - color: AppColor.colorHintSearchBar, - fontSize: 17.0) - ), - leftButton: buildIconWeb( - icon: SvgPicture.asset( - _imagePaths.icSearchBar, - width: 16, - height: 16, - fit: BoxFit.fill), - onTap: () { - final keyword = controller.currentTextSearch; - if (keyword.trim().isNotEmpty) { - controller.searchController.saveRecentSearch(RecentSearch.now(keyword)); - } - controller.mailboxDashBoardController.searchEmail(context, keyword); - }), - clearTextButton: buildIconWeb( - icon: SvgPicture.asset( - _imagePaths.icClearTextSearch, - width: 16, - height: 16, - fit: BoxFit.fill), - onTap: () { - controller.clearTextSearch(); - }), - rightButton: IconOpenAdvancedSearchWidget(context) - ), - suggestionsBoxDecoration: const QuickSearchSuggestionsBoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.all(Radius.circular(16)), - ), - debounceDuration: const Duration(milliseconds: 500), - hideSuggestionsBox: _responsiveUtils.isScreenWithShortestSide(context), - listActionButton: const [ - QuickSearchFilter.hasAttachment, - QuickSearchFilter.last7Days, - QuickSearchFilter.fromMe, - ], - actionButtonBuilder: (context, filterAction) { - if (filterAction is QuickSearchFilter) { - return _buildQuickSearchFilterButtonSuggestionBox( - context, - filterAction); - } - return const SizedBox.shrink(); - }, - buttonActionCallback: (filterAction) { - if (filterAction is QuickSearchFilter) { - controller.mailboxDashBoardController.selectQuickSearchFilter( - quickSearchFilter: filterAction, - fromSuggestionBox: true, - ); - } - }, - listActionPadding: const EdgeInsets.only( - left: 24, right: 24, top: 20, bottom: 12), - titleHeaderRecent: Padding( - padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 8), - child: Text(AppLocalizations.of(context).recent, - style: const TextStyle(fontSize: 13.0, - color: AppColor.colorTextButtonHeaderThread, - fontWeight: FontWeight.w500) - ) - ), - buttonShowAllResult: (context, keyword) { - if (keyword is String) { - return InkWell( - onTap: () { + portalFollower: _responsiveUtils.isMobile(context) + ? const SizedBox.shrink() + : const AdvancedSearchFilterOverlay(), + child: QuickSearchInputForm( + textFieldConfiguration: QuickSearchTextFieldConfiguration( + controller: controller.searchController.searchInputController, + autofocus: true, + enabled: controller.searchController.isAdvancedSearchViewOpen.isFalse, + focusNode: controller.searchController.searchFocus, + textInputAction: TextInputAction.done, + onSubmitted: (keyword) { if (keyword.trim().isNotEmpty) { controller.searchController.saveRecentSearch(RecentSearch.now(keyword)); } controller.mailboxDashBoardController.searchEmail(context, keyword); }, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 14), - child: Row(children: [ - Text(AppLocalizations.of(context).showingResultsFor, - style: const TextStyle(fontSize: 13.0, - color: AppColor.colorTextButtonHeaderThread, - fontWeight: FontWeight.w500) - ), - const SizedBox(width: 4), - Expanded(child: Text('"$keyword"', - style: const TextStyle( - fontSize: 13.0, - color: Colors.black, - fontWeight: FontWeight.w500))) - ]) + decoration: InputDecoration( + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + contentPadding: EdgeInsets.zero, + hintText: AppLocalizations.of(context).search_mail, + hintStyle: const TextStyle( + color: AppColor.colorHintSearchBar, + fontSize: 17.0), + labelStyle: const TextStyle( + color: AppColor.colorHintSearchBar, + fontSize: 17.0) ), - ); - } else { + leftButton: buildIconWeb( + icon: SvgPicture.asset( + _imagePaths.icSearchBar, + width: 16, + height: 16, + fit: BoxFit.fill), + onTap: () { + final keyword = controller.currentTextSearch; + if (keyword.trim().isNotEmpty) { + controller.searchController.saveRecentSearch(RecentSearch.now(keyword)); + } + controller.mailboxDashBoardController.searchEmail(context, keyword); + }), + clearTextButton: buildIconWeb( + icon: SvgPicture.asset( + _imagePaths.icClearTextSearch, + width: 16, + height: 16, + fit: BoxFit.fill), + onTap: () { + controller.clearTextSearch(); + }), + rightButton: IconOpenAdvancedSearchWidget(context) + ), + suggestionsBoxDecoration: const QuickSearchSuggestionsBoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(16)), + ), + debounceDuration: const Duration(milliseconds: 500), + hideSuggestionsBox: _responsiveUtils.isScreenWithShortestSide(context), + listActionButton: const [ + QuickSearchFilter.hasAttachment, + QuickSearchFilter.last7Days, + QuickSearchFilter.fromMe, + ], + actionButtonBuilder: (context, filterAction) { + if (filterAction is QuickSearchFilter) { + return _buildQuickSearchFilterButtonSuggestionBox( + context, + filterAction); + } return const SizedBox.shrink(); - } - }, - loadingBuilder: (context) => Padding( - padding: const EdgeInsets.only(bottom: 16), - child: loadingWidget, - ), - fetchRecentActionCallback: (pattern) async { - return controller.searchController.getAllRecentSearchAction(pattern); - }, - itemRecentBuilder: (context, recent) { - return RecentSearchItemTileWidget(recent); - }, - onRecentSelected: (recent) { - controller.searchController.updateTextSearch(recent.value); - controller.mailboxDashBoardController.searchEmail(context, recent.value); - }, - suggestionsCallback: (pattern) async { - controller.searchController.updateFilterEmail(text: SearchQuery(pattern)); - return controller.mailboxDashBoardController.quickSearchEmails(); - }, - itemBuilder: (context, email) { - return EmailQuickSearchItemTileWidget( - email, - controller.currentMailbox); - }, - onSuggestionSelected: (presentationEmail) async { - controller.pressEmailAction( - context, - EmailActionType.preview, - presentationEmail); - }), + }, + buttonActionCallback: (filterAction) { + if (filterAction is QuickSearchFilter) { + controller.mailboxDashBoardController.selectQuickSearchFilter( + quickSearchFilter: filterAction, + fromSuggestionBox: true, + ); + } + }, + listActionPadding: const EdgeInsets.only( + left: 24, right: 24, top: 20, bottom: 12), + titleHeaderRecent: Padding( + padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 8), + child: Text(AppLocalizations.of(context).recent, + style: const TextStyle(fontSize: 13.0, + color: AppColor.colorTextButtonHeaderThread, + fontWeight: FontWeight.w500) + ) + ), + buttonShowAllResult: (context, keyword) { + if (keyword is String) { + return InkWell( + onTap: () { + if (keyword.trim().isNotEmpty) { + controller.searchController.saveRecentSearch(RecentSearch.now(keyword)); + } + controller.mailboxDashBoardController.searchEmail(context, keyword); + }, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 14), + child: Row(children: [ + Text(AppLocalizations.of(context).showingResultsFor, + style: const TextStyle(fontSize: 13.0, + color: AppColor.colorTextButtonHeaderThread, + fontWeight: FontWeight.w500) + ), + const SizedBox(width: 4), + Expanded(child: Text('"$keyword"', + style: const TextStyle( + fontSize: 13.0, + color: Colors.black, + fontWeight: FontWeight.w500))) + ]) + ), + ); + } else { + return const SizedBox.shrink(); + } + }, + loadingBuilder: (context) => Padding( + padding: const EdgeInsets.only(bottom: 16), + child: loadingWidget, + ), + fetchRecentActionCallback: (pattern) async { + return controller.searchController.getAllRecentSearchAction(pattern); + }, + itemRecentBuilder: (context, recent) { + return RecentSearchItemTileWidget(recent); + }, + onRecentSelected: (recent) { + controller.searchController.updateTextSearch(recent.value); + controller.mailboxDashBoardController.searchEmail(context, recent.value); + }, + suggestionsCallback: (pattern) async { + controller.searchController.updateFilterEmail(text: SearchQuery(pattern)); + return controller.mailboxDashBoardController.quickSearchEmails(); + }, + itemBuilder: (context, email) { + return EmailQuickSearchItemTileWidget( + email, + controller.currentMailbox); + }, + onSuggestionSelected: (presentationEmail) async { + controller.pressEmailAction( + context, + EmailActionType.preview, + presentationEmail); + }), + ), ), )), const SizedBox(width: 16),