TF-691 Hide advanced search menu overlay when click outside menu

This commit is contained in:
dab246
2022-08-04 16:04:59 +07:00
committed by Dat H. Pham
parent 6b1d967861
commit fcaedeaf55
2 changed files with 348 additions and 312 deletions
@@ -161,10 +161,17 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
}), }),
const SizedBox(width: 16), const SizedBox(width: 16),
Obx(() => !searchController.isSearchActive() ? const Spacer() : const SizedBox.shrink()), Obx(() => !searchController.isSearchActive() ? const Spacer() : const SizedBox.shrink()),
Obx(() => searchController.isSearchActive() Obx(() {
? Expanded(child: _buildSearchForm(context)) if (searchController.isSearchActive()) {
: PortalTarget( return Expanded(child: _buildSearchForm(context));
visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, } else {
return PortalTarget(
visible: searchController.isAdvancedSearchViewOpen.isTrue,
portalFollower: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => searchController.selectOpenAdvanceSearch()),
child: PortalTarget(
visible: searchController.isAdvancedSearchViewOpen.isTrue,
anchor: const Aligned( anchor: const Aligned(
follower: Alignment.topRight, follower: Alignment.topRight,
target: Alignment.bottomRight, target: Alignment.bottomRight,
@@ -175,14 +182,19 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
widthFactor: 3, widthFactor: 3,
), ),
), ),
portalFollower: responsiveUtils.isMobile(context) ? const SizedBox.shrink() : const AdvancedSearchFilterOverlay(), portalFollower: responsiveUtils.isMobile(context)
? const SizedBox.shrink()
: const AdvancedSearchFilterOverlay(),
child: (SearchBarView(imagePaths) child: (SearchBarView(imagePaths)
..hintTextSearch(AppLocalizations.of(context).search_emails) ..hintTextSearch(AppLocalizations.of(context).search_emails)
..maxSizeWidth(240) ..maxSizeWidth(240)
..addOnOpenSearchViewAction(() => searchController.enableSearch()) ..addOnOpenSearchViewAction(() => searchController.enableSearch())
..addRightButton(IconOpenAdvancedSearchWidget(context))) ..addRightButton(IconOpenAdvancedSearchWidget(context)))
.build(), .build(),
)), ),
);
}
}),
Obx(() => !searchController.isSearchActive() ? const SizedBox(width: 16) : const SizedBox.shrink()), Obx(() => !searchController.isSearchActive() ? const SizedBox(width: 16) : const SizedBox.shrink()),
Obx(() => (AvatarBuilder() Obx(() => (AvatarBuilder()
..text(controller.userProfile.value?.getAvatarText() ?? '') ..text(controller.userProfile.value?.getAvatarText() ?? '')
@@ -427,6 +439,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
borderRadius: BorderRadius.all(Radius.circular(10)), borderRadius: BorderRadius.all(Radius.circular(10)),
color: AppColor.colorBgSearchBar), color: AppColor.colorBgSearchBar),
height: 45, height: 45,
child: PortalTarget(
visible: searchController.isAdvancedSearchViewOpen.isTrue,
portalFollower: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => searchController.selectOpenAdvanceSearch()),
child: PortalTarget( child: PortalTarget(
visible: searchController.isAdvancedSearchViewOpen.isTrue, visible: searchController.isAdvancedSearchViewOpen.isTrue,
anchor: const Aligned( anchor: const Aligned(
@@ -439,7 +456,9 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
widthFactor: 1, widthFactor: 1,
), ),
), ),
portalFollower: const AdvancedSearchFilterOverlay(), portalFollower: responsiveUtils.isMobile(context)
? const SizedBox.shrink()
: const AdvancedSearchFilterOverlay(),
child: QuickSearchInputForm<PresentationEmail, RecentSearch>( child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
textFieldConfiguration: QuickSearchTextFieldConfiguration( textFieldConfiguration: QuickSearchTextFieldConfiguration(
controller: searchController.searchInputController, controller: searchController.searchInputController,
@@ -590,6 +609,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
OpenEmailDetailedAction(context, presentationEmail)); OpenEmailDetailedAction(context, presentationEmail));
}), }),
), ),
),
)), )),
const SizedBox(width: 16), const SizedBox(width: 16),
] ]
@@ -170,6 +170,11 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
Widget _buildSearchFormInActive(BuildContext context) { Widget _buildSearchFormInActive(BuildContext context) {
return PortalTarget( return PortalTarget(
visible: controller.searchController.isAdvancedSearchViewOpen.isTrue,
portalFollower: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => controller.searchController.selectOpenAdvanceSearch()),
child: PortalTarget(
visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, visible: controller.searchController.isAdvancedSearchViewOpen.isTrue,
anchor: const Aligned( anchor: const Aligned(
follower: Alignment.topLeft, follower: Alignment.topLeft,
@@ -181,12 +186,15 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
widthFactor: 1, widthFactor: 1,
), ),
), ),
portalFollower: _responsiveUtils.isMobile(context) ? const SizedBox.shrink() : const AdvancedSearchFilterOverlay(), portalFollower: _responsiveUtils.isMobile(context)
? const SizedBox.shrink()
: const AdvancedSearchFilterOverlay(),
child: (SearchBarView(_imagePaths) child: (SearchBarView(_imagePaths)
..hintTextSearch(AppLocalizations.of(context).search_emails) ..hintTextSearch(AppLocalizations.of(context).search_emails)
..addOnOpenSearchViewAction(() => controller.enableSearch(context)) ..addOnOpenSearchViewAction(() => controller.enableSearch(context))
..addRightButton(IconOpenAdvancedSearchWidget(context))) ..addRightButton(IconOpenAdvancedSearchWidget(context)))
.build(), .build(),
),
); );
} }
@@ -204,6 +212,11 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
borderRadius: BorderRadius.all(Radius.circular(10)), borderRadius: BorderRadius.all(Radius.circular(10)),
color: AppColor.colorBgSearchBar), color: AppColor.colorBgSearchBar),
height: 45, height: 45,
child: PortalTarget(
visible: controller.searchController.isAdvancedSearchViewOpen.isTrue,
portalFollower: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => controller.searchController.selectOpenAdvanceSearch()),
child: PortalTarget( child: PortalTarget(
visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, visible: controller.searchController.isAdvancedSearchViewOpen.isTrue,
anchor: const Aligned( anchor: const Aligned(
@@ -216,7 +229,9 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
widthFactor: 1, widthFactor: 1,
), ),
), ),
portalFollower: _responsiveUtils.isMobile(context) ? const SizedBox.shrink() : const AdvancedSearchFilterOverlay(), portalFollower: _responsiveUtils.isMobile(context)
? const SizedBox.shrink()
: const AdvancedSearchFilterOverlay(),
child: QuickSearchInputForm<PresentationEmail, RecentSearch>( child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
textFieldConfiguration: QuickSearchTextFieldConfiguration( textFieldConfiguration: QuickSearchTextFieldConfiguration(
controller: controller.searchController.searchInputController, controller: controller.searchController.searchInputController,
@@ -364,6 +379,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
presentationEmail); presentationEmail);
}), }),
), ),
),
)), )),
const SizedBox(width: 16), const SizedBox(width: 16),
] ]