create icon open advanced_search_filter_overlay for web

This commit is contained in:
ManhNTX
2022-06-26 13:57:48 +07:00
committed by Dat H. Pham
parent 856d98f947
commit 01b3d879f0
2 changed files with 219 additions and 200 deletions
@@ -1,5 +1,6 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
@@ -12,6 +13,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailb
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart';
@@ -49,7 +51,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
desktop: const SizedBox.shrink(), desktop: const SizedBox.shrink(),
), ),
drawerEnableOpenDragGesture: responsiveUtils.isMobile(context) || responsiveUtils.isTablet(context), drawerEnableOpenDragGesture: responsiveUtils.isMobile(context) || responsiveUtils.isTablet(context),
body: Stack(children: [ body: Portal(
child: Stack(children: [
ResponsiveWidget( ResponsiveWidget(
responsiveUtils: responsiveUtils, responsiveUtils: responsiveUtils,
desktop: Column(children: [ desktop: Column(children: [
@@ -109,6 +112,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
? const SizedBox.shrink() ? const SizedBox.shrink()
: Align(alignment: Alignment.bottomCenter, child: buildNetworkConnectionWidget(context))), : Align(alignment: Alignment.bottomCenter, child: buildNetworkConnectionWidget(context))),
]), ]),
),
); );
} }
@@ -412,11 +416,24 @@ 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: controller.searchController.isAdvancedSearchViewOpen.isTrue,
anchor: const Aligned(
follower: Alignment.topLeft,
target: Alignment.bottomLeft,
widthFactor: 1,
backup: Aligned(
follower: Alignment.bottomLeft,
target: Alignment.topLeft,
widthFactor: 1,
),
),
portalFollower:const AdvancedSearchFilterOverlay(),
child: QuickSearchInputForm<PresentationEmail, RecentSearch>( child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
textFieldConfiguration: QuickSearchTextFieldConfiguration( textFieldConfiguration: QuickSearchTextFieldConfiguration(
controller: searchController.searchInputController, controller: controller.searchController.searchInputController,
autofocus: true, autofocus: true,
focusNode: searchController.searchFocus, focusNode: controller.searchController.searchFocus,
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
onSubmitted: (keyword) { onSubmitted: (keyword) {
if (keyword.trim().isNotEmpty) { if (keyword.trim().isNotEmpty) {
@@ -426,7 +443,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
}, },
onChanged: (query) { onChanged: (query) {
log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query'); log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query');
searchController.onChangeTextSearch(query); controller.searchController.onChangeTextSearch(query);
}, },
decoration: InputDecoration( decoration: InputDecoration(
border: InputBorder.none, border: InputBorder.none,
@@ -448,9 +465,9 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
height: 16, height: 16,
fit: BoxFit.fill), fit: BoxFit.fill),
onTap: () { onTap: () {
final keyword = searchController.searchInputController.text; final keyword = controller.searchController.searchInputController.text;
if (keyword.trim().isNotEmpty) { if (keyword.trim().isNotEmpty) {
searchController.saveRecentSearch(RecentSearch.now(keyword)); controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
} }
controller.searchEmail(context, keyword); controller.searchEmail(context, keyword);
}), }),
@@ -461,7 +478,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
height: 16, height: 16,
fit: BoxFit.fill), fit: BoxFit.fill),
onTap: () { onTap: () {
searchController.clearTextSearch(); controller.searchController.clearTextSearch();
}), }),
rightButton: IconOpenAdvancedSearchWidget(context) rightButton: IconOpenAdvancedSearchWidget(context)
), ),
@@ -487,7 +504,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
}, },
buttonActionCallback: (filterAction) { buttonActionCallback: (filterAction) {
if (filterAction is QuickSearchFilter) { if (filterAction is QuickSearchFilter) {
controller.selectQuickSearchFilter( controller.searchController.selectQuickSearchFilter(
quickSearchFilter: filterAction, quickSearchFilter: filterAction,
fromSuggestionBox: true, fromSuggestionBox: true,
); );
@@ -511,7 +528,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return InkWell( return InkWell(
onTap: () { onTap: () {
if (keyword.trim().isNotEmpty) { if (keyword.trim().isNotEmpty) {
searchController.saveRecentSearch(RecentSearch.now(keyword)); controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
} }
controller.searchEmail(context, keyword); controller.searchEmail(context, keyword);
}, },
@@ -543,17 +560,17 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
child: loadingWidget, child: loadingWidget,
), ),
fetchRecentActionCallback: (pattern) async { fetchRecentActionCallback: (pattern) async {
return searchController.getAllRecentSearchAction(pattern); return controller.searchController.getAllRecentSearchAction(pattern);
}, },
itemRecentBuilder: (context, recent) { itemRecentBuilder: (context, recent) {
return RecentSearchItemTileWidget(recent); return RecentSearchItemTileWidget(recent);
}, },
onRecentSelected: (recent) { onRecentSelected: (recent) {
searchController.searchInputController.text = recent.value; controller.searchController.searchInputController.text = recent.value;
controller.searchEmail(context, recent.value); controller.searchEmail(context, recent.value);
}, },
suggestionsCallback: (pattern) async { suggestionsCallback: (pattern) async {
return controller.quickSearchEmails(); return controller.searchController.quickSearchEmails();
}, },
itemBuilder: (context, email) { itemBuilder: (context, email) {
return EmailQuickSearchItemTileWidget( return EmailQuickSearchItemTileWidget(
@@ -563,6 +580,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
controller.dispatchAction( controller.dispatchAction(
OpenEmailDetailedAction(context, presentationEmail)); OpenEmailDetailedAction(context, presentationEmail));
}), }),
),
)), )),
const SizedBox(width: 16), const SizedBox(width: 16),
] ]
@@ -14,7 +14,6 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget {
}) : super(key: key); }) : super(key: key);
final _imagePaths = Get.find<ImagePaths>(); final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final controller = Get.find<SearchController>(); final controller = Get.find<SearchController>();
final BuildContext _parentContext; final BuildContext _parentContext;
@@ -30,7 +29,9 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget {
: AppColor.colorFilterMessageDisabled, : AppColor.colorFilterMessageDisabled,
width: 16, width: 16,
height: 16), height: 16),
onTap: _responsiveUtils.isMobile(context) ? () {controller.showAdvancedFilterView(_parentContext);} : null), onTap: () {
controller.showAdvancedFilterView(_parentContext);
}),
); );
} }
} }