From 5c7eb62eb73d8e520465da4345515f64850ab5f9 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 30 Aug 2023 16:19:46 +0700 Subject: [PATCH] TF-1984 Move `Get.find()` outside the build method (cherry picked from commit 22b810dfda89f19dfb54f632ed6c390bf81ca326) --- .../mailbox_dashboard_view_web.dart | 9 +-- .../advanced_search_filter_overlay.dart | 8 +- .../widgets/search_input_form_widget.dart | 81 +++++++++---------- .../widgets/language_menu_overlay.dart | 7 +- 4 files changed, 43 insertions(+), 62 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 9ffc4d8d9..8b298621a 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -292,15 +292,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { Widget _buildRightHeader(BuildContext context) { return LayoutBuilder(builder: (context, constraint) { return Row(children: [ - Container( + SizedBox( width: constraint.maxWidth / 2, height: 52, - color: Colors.transparent, - child: SearchInputFormWidget( - maxWidth: constraint.maxWidth / 2, - dashBoardController: controller, - imagePaths: imagePaths - ) + child: SearchInputFormWidget() ), const Spacer(), AppConfig.appGridDashboardAvailable diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart index eabb06977..be12ad4b8 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart @@ -7,12 +7,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/ad class AdvancedSearchFilterOverlay extends StatelessWidget { - final double? maxWidth; - - const AdvancedSearchFilterOverlay({ - Key? key, - this.maxWidth - }) : super(key: key); + const AdvancedSearchFilterOverlay({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -25,7 +20,6 @@ class AdvancedSearchFilterOverlay extends StatelessWidget { constraints: BoxConstraints( maxHeight: _getHeightOverlay(context, responsiveUtils), ), - width: maxWidth ?? 660, margin: const EdgeInsetsDirectional.only(top: 4, bottom: 16, end: 22), padding: const EdgeInsets.symmetric(horizontal: 8), decoration: BoxDecoration( diff --git a/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart index 6ffd8fdc7..c9f0b51bb 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart @@ -22,34 +22,28 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/em import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/utils/app_utils.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search; class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { - final MailboxDashBoardController dashBoardController; - final ImagePaths imagePaths; - final double maxWidth; + final _searchController = Get.find(); + final _dashBoardController = Get.find(); + final _imagePaths = Get.find(); - SearchInputFormWidget({ - Key? key, - required this.dashBoardController, - required this.imagePaths, - required this.maxWidth, - }) : super(key: key); + SearchInputFormWidget({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - final controller = dashBoardController.searchController; - return Obx(() { return PortalTarget( - visible: controller.isAdvancedSearchViewOpen.isTrue, + visible: _searchController.isAdvancedSearchViewOpen.isTrue, portalFollower: PointerInterceptor( child: GestureDetector( behavior: HitTestBehavior.opaque, - onTap: () => controller.selectOpenAdvanceSearch() + onTap: () => _searchController.selectOpenAdvanceSearch() ), ), child: PortalTarget( - visible: controller.isAdvancedSearchViewOpen.isTrue, + visible: _searchController.isAdvancedSearchViewOpen.isTrue, anchor: const Aligned( follower: Alignment.topRight, target: Alignment.bottomRight, @@ -60,15 +54,14 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { widthFactor: 1, ), ), - portalFollower: AdvancedSearchFilterOverlay(maxWidth: maxWidth), + portalFollower: const AdvancedSearchFilterOverlay(), child: QuickSearchInputForm( maxHeight: 52, suggestionsBoxVerticalOffset: 0.0, textFieldConfiguration: _createConfiguration(context), - suggestionsBoxDecoration: QuickSearchSuggestionsBoxDecoration( + suggestionsBoxDecoration: const QuickSearchSuggestionsBoxDecoration( color: Colors.white, - borderRadius: const BorderRadius.all(Radius.circular(16)), - constraints: BoxConstraints(maxWidth: maxWidth) + borderRadius: BorderRadius.all(Radius.circular(16)), ), debounceDuration: const Duration(milliseconds: 300), listActionButton: QuickSearchFilter.values, @@ -81,7 +74,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { }, buttonActionCallback: (filterAction) { if (filterAction is QuickSearchFilter) { - dashBoardController.addFilterToSuggestionForm(filterAction); + _dashBoardController.addFilterToSuggestionForm(filterAction); } }, listActionPadding: const EdgeInsets.only(left: 12, right: 12, top: 12, bottom: 6), @@ -107,11 +100,11 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { padding: const EdgeInsets.only(bottom: 16), child: loadingWidget ), - fetchRecentActionCallback: controller.getAllRecentSearchAction, + fetchRecentActionCallback: _searchController.getAllRecentSearchAction, itemRecentBuilder: (context, recent) => RecentSearchItemTileWidget(recent), onRecentSelected: (recent) => _invokeSelectRecentItem(context, recent), - suggestionsCallback: dashBoardController.quickSearchEmails, - itemBuilder: (context, email) => EmailQuickSearchItemTileWidget(email, dashBoardController.selectedMailbox.value), + suggestionsCallback: _dashBoardController.quickSearchEmails, + itemBuilder: (context, email) => EmailQuickSearchItemTileWidget(email, _dashBoardController.selectedMailbox.value), onSuggestionSelected: (presentationEmail) => _invokeSelectSuggestionItem(context, presentationEmail)) ), ); @@ -119,23 +112,23 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { } void _invokeSearchEmailAction(BuildContext context, String query) { - dashBoardController.searchController.searchFocus.unfocus(); - dashBoardController.searchController.enableSearch(); + _searchController.searchFocus.unfocus(); + _searchController.enableSearch(); if (query.isNotEmpty) { - dashBoardController.searchController.saveRecentSearch(RecentSearch.now(query)); + _searchController.saveRecentSearch(RecentSearch.now(query)); } - if (query.isNotEmpty || dashBoardController.searchController.listFilterOnSuggestionForm.isNotEmpty) { - dashBoardController.searchController.applyFilterSuggestionToSearchFilter(dashBoardController.userProfile.value); - dashBoardController.searchEmail(context, queryString: query); + if (query.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) { + _searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.userProfile.value); + _dashBoardController.searchEmail(context, queryString: query); } else { - dashBoardController.clearSearchEmail(); + _dashBoardController.clearSearchEmail(); } } void _invokeSelectSuggestionItem(BuildContext context, PresentationEmail presentationEmail) { - dashBoardController.dispatchAction( + _dashBoardController.dispatchAction( OpenEmailDetailedFromSuggestionQuickSearchAction( context, presentationEmail @@ -144,12 +137,12 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { } void _invokeSelectRecentItem(BuildContext context, RecentSearch recent) { - dashBoardController.searchController.searchInputController.text = recent.value; - dashBoardController.searchController.searchFocus.unfocus(); - dashBoardController.searchController.enableSearch(); + _searchController.searchInputController.text = recent.value; + _searchController.searchFocus.unfocus(); + _searchController.enableSearch(); - dashBoardController.searchController.applyFilterSuggestionToSearchFilter(dashBoardController.userProfile.value); - dashBoardController.searchEmail(context, queryString: recent.value); + _searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.userProfile.value); + _dashBoardController.searchEmail(context, queryString: recent.value); } Widget _buildShowAllResultButton(BuildContext context, String keyword) { @@ -181,11 +174,9 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { } QuickSearchTextFieldConfiguration _createConfiguration(BuildContext context) { - final controller = dashBoardController.searchController; - return QuickSearchTextFieldConfiguration( - controller: controller.searchInputController, - focusNode: controller.searchFocus, + controller: _searchController.searchInputController, + focusNode: _searchController.searchFocus, textInputAction: TextInputAction.done, textDirection: DirectionUtils.getDirectionByLanguage(context), onSubmitted: (keyword) => _invokeSearchEmailAction(context, keyword.trim()), @@ -206,18 +197,18 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { child: buildIconWeb( minSize: 40, iconPadding: EdgeInsets.zero, - icon: SvgPicture.asset(imagePaths.icSearchBar, fit: BoxFit.fill), - onTap: () => _invokeSearchEmailAction(context, controller.searchInputController.text.trim()) + icon: SvgPicture.asset(_imagePaths.icSearchBar, fit: BoxFit.fill), + onTap: () => _invokeSearchEmailAction(context, _searchController.searchInputController.text.trim()) ) ), clearTextButton: buildIconWeb( icon: SvgPicture.asset( - imagePaths.icClearTextSearch, + _imagePaths.icClearTextSearch, width: 16, height: 16, fit: BoxFit.fill ), - onTap: controller.clearTextSearch + onTap: _searchController.clearTextSearch ), rightButton: IconOpenAdvancedSearchWidget(context) ); @@ -225,7 +216,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { Widget buildListButtonForQuickSearchForm(BuildContext context, QuickSearchFilter filter) { return Obx(() { - final isFilterSelected = filter.isApplied(dashBoardController.searchController.listFilterOnSuggestionForm); + final isFilterSelected = filter.isApplied(_searchController.listFilterOnSuggestionForm); return Chip( labelPadding: EdgeInsets.only( @@ -242,7 +233,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { style: filter.getTextStyle(isFilterSelected: isFilterSelected), ), avatar: SvgPicture.asset( - filter.getIcon(imagePaths, isFilterSelected: isFilterSelected), + filter.getIcon(_imagePaths, isFilterSelected: isFilterSelected), width: 16, height: 16, fit: BoxFit.fill), diff --git a/lib/features/manage_account/presentation/language_and_region/widgets/language_menu_overlay.dart b/lib/features/manage_account/presentation/language_and_region/widgets/language_menu_overlay.dart index 341c118ba..ae0196077 100644 --- a/lib/features/manage_account/presentation/language_and_region/widgets/language_menu_overlay.dart +++ b/lib/features/manage_account/presentation/language_and_region/widgets/language_menu_overlay.dart @@ -12,7 +12,9 @@ class LanguageRegionOverlay extends StatelessWidget { final double? maxWidth; final OnSelectLanguageAction onSelectLanguageAction; - const LanguageRegionOverlay({ + final _responsiveUtils = Get.find(); + + LanguageRegionOverlay({ Key? key, required this.listSupportedLanguages, required this.localeSelected, @@ -54,11 +56,10 @@ class LanguageRegionOverlay extends StatelessWidget { } double _getHeightOverlay(BuildContext context) { - final responsiveUtils = Get.find(); const double maxHeightTopBar = 80; const double maxHeightTitleLanguage = 200; const double paddingBottom = 16; - final currentHeight = responsiveUtils.getSizeScreenHeight(context); + final currentHeight = _responsiveUtils.getSizeScreenHeight(context); double maxHeightForm = currentHeight - maxHeightTopBar - maxHeightTitleLanguage - paddingBottom; return maxHeightForm; }