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:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.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/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/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/email_quick_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(),
),
drawerEnableOpenDragGesture: responsiveUtils.isMobile(context) || responsiveUtils.isTablet(context),
body: Stack(children: [
body: Portal(
child: Stack(children: [
ResponsiveWidget(
responsiveUtils: responsiveUtils,
desktop: Column(children: [
@@ -109,6 +112,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
? const SizedBox.shrink()
: Align(alignment: Alignment.bottomCenter, child: buildNetworkConnectionWidget(context))),
]),
),
);
}
@@ -412,11 +416,24 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
borderRadius: BorderRadius.all(Radius.circular(10)),
color: AppColor.colorBgSearchBar),
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>(
textFieldConfiguration: QuickSearchTextFieldConfiguration(
controller: searchController.searchInputController,
controller: controller.searchController.searchInputController,
autofocus: true,
focusNode: searchController.searchFocus,
focusNode: controller.searchController.searchFocus,
textInputAction: TextInputAction.done,
onSubmitted: (keyword) {
if (keyword.trim().isNotEmpty) {
@@ -426,7 +443,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
},
onChanged: (query) {
log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query');
searchController.onChangeTextSearch(query);
controller.searchController.onChangeTextSearch(query);
},
decoration: InputDecoration(
border: InputBorder.none,
@@ -448,9 +465,9 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
height: 16,
fit: BoxFit.fill),
onTap: () {
final keyword = searchController.searchInputController.text;
final keyword = controller.searchController.searchInputController.text;
if (keyword.trim().isNotEmpty) {
searchController.saveRecentSearch(RecentSearch.now(keyword));
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
}
controller.searchEmail(context, keyword);
}),
@@ -461,7 +478,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
height: 16,
fit: BoxFit.fill),
onTap: () {
searchController.clearTextSearch();
controller.searchController.clearTextSearch();
}),
rightButton: IconOpenAdvancedSearchWidget(context)
),
@@ -487,7 +504,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
},
buttonActionCallback: (filterAction) {
if (filterAction is QuickSearchFilter) {
controller.selectQuickSearchFilter(
controller.searchController.selectQuickSearchFilter(
quickSearchFilter: filterAction,
fromSuggestionBox: true,
);
@@ -511,7 +528,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return InkWell(
onTap: () {
if (keyword.trim().isNotEmpty) {
searchController.saveRecentSearch(RecentSearch.now(keyword));
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
}
controller.searchEmail(context, keyword);
},
@@ -543,17 +560,17 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
child: loadingWidget,
),
fetchRecentActionCallback: (pattern) async {
return searchController.getAllRecentSearchAction(pattern);
return controller.searchController.getAllRecentSearchAction(pattern);
},
itemRecentBuilder: (context, recent) {
return RecentSearchItemTileWidget(recent);
},
onRecentSelected: (recent) {
searchController.searchInputController.text = recent.value;
controller.searchController.searchInputController.text = recent.value;
controller.searchEmail(context, recent.value);
},
suggestionsCallback: (pattern) async {
return controller.quickSearchEmails();
return controller.searchController.quickSearchEmails();
},
itemBuilder: (context, email) {
return EmailQuickSearchItemTileWidget(
@@ -563,6 +580,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
controller.dispatchAction(
OpenEmailDetailedAction(context, presentationEmail));
}),
),
)),
const SizedBox(width: 16),
]
@@ -14,7 +14,6 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget {
}) : super(key: key);
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final controller = Get.find<SearchController>();
final BuildContext _parentContext;
@@ -30,7 +29,9 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget {
: AppColor.colorFilterMessageDisabled,
width: 16,
height: 16),
onTap: _responsiveUtils.isMobile(context) ? () {controller.showAdvancedFilterView(_parentContext);} : null),
onTap: () {
controller.showAdvancedFilterView(_parentContext);
}),
);
}
}