From 84438efc8901d3c959d4310c08076728e947ea96 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 7 Apr 2023 07:33:53 +0700 Subject: [PATCH] TF-1694 Use `KeyboardUtils` to centralized management `show/hide` keyboard (cherry picked from commit e2598476ecdc8c5d16a17dc3c777a34620013c64) --- .../presentation/utils/keyboard_utils.dart | 12 ++++++----- .../composer/presentation/composer_view.dart | 19 +++++++++++++++--- .../presentation/composer_view_web.dart | 20 ++++++++++++++++--- .../presentation/contact_controller.dart | 5 +++-- .../destination_picker_controller.dart | 11 +++++----- .../identity_creator_controller.dart | 10 ++++++---- .../login/presentation/login_view.dart | 4 +--- .../presentation/mailbox_controller.dart | 2 +- .../mailbox_creator_controller.dart | 6 +++--- .../mailbox_dashboard_controller.dart | 2 +- .../forward/forward_controller.dart | 3 ++- .../vacation/vacation_controller.dart | 4 ++-- .../presentation/vacation/vacation_view.dart | 2 +- .../rules_filter_creator_controller.dart | 5 +++-- .../rules_filter_creator_view.dart | 12 +++++------ .../presentation/search_email_controller.dart | 5 +++-- .../search_mailbox_controller.dart | 9 +++++---- lib/main/bindings/core/core_bindings.dart | 12 +++++------ 18 files changed, 89 insertions(+), 54 deletions(-) diff --git a/core/lib/presentation/utils/keyboard_utils.dart b/core/lib/presentation/utils/keyboard_utils.dart index a1f306bb9..a6a3fa65c 100644 --- a/core/lib/presentation/utils/keyboard_utils.dart +++ b/core/lib/presentation/utils/keyboard_utils.dart @@ -1,10 +1,12 @@ import 'package:flutter/cupertino.dart'; +import 'package:flutter/services.dart'; class KeyboardUtils { - void hideKeyboard(BuildContext context) { - FocusScopeNode currentFocus = FocusScope.of(context); - if (!currentFocus.hasPrimaryFocus) { - currentFocus.unfocus(); - } + static void hideKeyboard(BuildContext context) { + FocusScope.of(context).unfocus(); + } + + static void hideSystemKeyboardMobile() { + SystemChannels.textInput.invokeMethod('TextInput.hide'); } } \ No newline at end of file diff --git a/lib/features/composer/presentation/composer_view.dart b/lib/features/composer/presentation/composer_view.dart index 771791bf7..7ebe7cf15 100644 --- a/lib/features/composer/presentation/composer_view.dart +++ b/lib/features/composer/presentation/composer_view.dart @@ -1,4 +1,15 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/extensions/capitalize_extension.dart'; +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/extensions/html_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:core/presentation/views/button/icon_button_web.dart'; +import 'package:core/presentation/views/context_menu/simple_context_menu_action_builder.dart'; +import 'package:core/presentation/views/image/avatar_builder.dart'; +import 'package:core/presentation/views/list/sliver_grid_delegate_fixed_height.dart'; +import 'package:core/presentation/views/responsive/responsive_widget.dart'; +import 'package:core/presentation/views/text/text_field_builder.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:file_picker/file_picker.dart'; import 'package:filesize/filesize.dart'; @@ -7,7 +18,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; -import 'package:model/model.dart'; +import 'package:model/email/email_action_type.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:model/extensions/list_email_content_extension.dart'; +import 'package:model/mailbox/expand_mode.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; @@ -27,7 +41,6 @@ class ComposerView extends GetWidget final responsiveUtils = Get.find(); final imagePaths = Get.find(); - final keyboardUtils = Get.find(); ComposerView({Key? key}) : super(key: key); diff --git a/lib/features/composer/presentation/composer_view_web.dart b/lib/features/composer/presentation/composer_view_web.dart index d55994b52..8ee74998d 100644 --- a/lib/features/composer/presentation/composer_view_web.dart +++ b/lib/features/composer/presentation/composer_view_web.dart @@ -1,4 +1,16 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/extensions/capitalize_extension.dart'; +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/extensions/html_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/presentation/utils/html_transformer/html_template.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:core/presentation/utils/style_utils.dart'; +import 'package:core/presentation/views/button/icon_button_web.dart'; +import 'package:core/presentation/views/image/avatar_builder.dart'; +import 'package:core/presentation/views/responsive/responsive_widget.dart'; +import 'package:core/presentation/views/text/text_field_builder.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:file_picker/file_picker.dart'; import 'package:filesize/filesize.dart'; @@ -7,7 +19,10 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:html_editor_enhanced/html_editor.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; -import 'package:model/model.dart'; +import 'package:model/email/email_action_type.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:model/extensions/list_email_content_extension.dart'; +import 'package:model/mailbox/expand_mode.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; @@ -29,7 +44,6 @@ class ComposerView extends GetWidget final responsiveUtils = Get.find(); final imagePaths = Get.find(); final appToast = Get.find(); - final keyboardUtils = Get.find(); ComposerView({Key? key}) : super(key: key); diff --git a/lib/features/contact/presentation/contact_controller.dart b/lib/features/contact/presentation/contact_controller.dart index 17986f5f8..c8a543ff6 100644 --- a/lib/features/contact/presentation/contact_controller.dart +++ b/lib/features/contact/presentation/contact_controller.dart @@ -1,4 +1,5 @@ +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/build_utils.dart'; import 'package:flutter/material.dart'; @@ -171,7 +172,7 @@ class ContactController extends BaseController { } void selectContact(BuildContext context, EmailAddress emailAddress) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (BuildUtils.isWeb) { onSelectedContactCallback?.call(emailAddress); @@ -182,7 +183,7 @@ class ContactController extends BaseController { void closeContactView(BuildContext context) { clearAllTextInputSearchForm(); - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (BuildUtils.isWeb) { onDismissContactView?.call(); diff --git a/lib/features/destination_picker/presentation/destination_picker_controller.dart b/lib/features/destination_picker/presentation/destination_picker_controller.dart index 802ea9973..2256a54f0 100644 --- a/lib/features/destination_picker/presentation/destination_picker_controller.dart +++ b/lib/features/destination_picker/presentation/destination_picker_controller.dart @@ -2,6 +2,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/build_utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -265,7 +266,7 @@ class DestinationPickerController extends BaseMailboxController { searchState.value = searchState.value.disableSearchState(); searchQuery.value = SearchQuery.initial(); searchInputController?.clear(); - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); } void clearSearchText() { @@ -368,7 +369,7 @@ class DestinationPickerController extends BaseMailboxController { } void dispatchSelectMailboxDestination(BuildContext context) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (mailboxDestination.value == null) { _appToast.showToastErrorMessage( @@ -385,7 +386,7 @@ class DestinationPickerController extends BaseMailboxController { } void createNewMailboxAction(BuildContext context) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); final nameMailbox = newNameMailbox.value; if (nameMailbox != null && nameMailbox.isNotEmpty) { @@ -408,7 +409,7 @@ class DestinationPickerController extends BaseMailboxController { void backToDestinationScreen(BuildContext context) { nameInputController?.clear(); - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); destinationScreenType.value = DestinationScreenType.destinationPicker; } @@ -424,7 +425,7 @@ class DestinationPickerController extends BaseMailboxController { } void closeDestinationPicker(BuildContext context) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (BuildUtils.isWeb) { onDismissDestinationPicker?.call(); diff --git a/lib/features/identity_creator/presentation/identity_creator_controller.dart b/lib/features/identity_creator/presentation/identity_creator_controller.dart index bf12067b6..9988fd9ae 100644 --- a/lib/features/identity_creator/presentation/identity_creator_controller.dart +++ b/lib/features/identity_creator/presentation/identity_creator_controller.dart @@ -1,10 +1,10 @@ +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/build_utils.dart'; import 'package:flutter/cupertino.dart'; -import 'package:flutter/services.dart'; import 'package:get/get_core/get_core.dart'; import 'package:get/get_instance/get_instance.dart'; import 'package:get/get_rx/get_rx.dart'; @@ -17,7 +17,9 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; -import 'package:model/model.dart'; +import 'package:model/extensions/email_address_extension.dart'; +import 'package:model/extensions/identity_extension.dart'; +import 'package:model/user/user_profile.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart'; @@ -426,9 +428,9 @@ class IdentityCreatorController extends BaseController { void clearFocusEditor(BuildContext context) { if (!BuildUtils.isWeb) { keyboardRichTextController.htmlEditorApi?.unfocus(); + KeyboardUtils.hideSystemKeyboardMobile(); } - SystemChannels.textInput.invokeMethod('TextInput.hide'); - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); } void closeView(BuildContext context) { diff --git a/lib/features/login/presentation/login_view.dart b/lib/features/login/presentation/login_view.dart index c9481cd36..f0a62471a 100644 --- a/lib/features/login/presentation/login_view.dart +++ b/lib/features/login/presentation/login_view.dart @@ -1,4 +1,4 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/extensions/color_extension.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; @@ -14,8 +14,6 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class LoginView extends BaseLoginView { - final keyboardUtils = Get.find(); - LoginView({Key? key}) : super(key: key); @override diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 795927dbc..7c5fb8d46 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -439,7 +439,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM PresentationMailbox presentationMailboxSelected ) { log('MailboxController::_handleOpenMailbox(): '); - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); mailboxDashBoardController.clearSelectedEmail(); if (presentationMailboxSelected.id != mailboxDashBoardController.selectedMailbox.value?.id) { diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart index f290a98b2..a3941202d 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart @@ -134,7 +134,7 @@ class MailboxCreatorController extends BaseController { } void selectMailboxLocation(BuildContext context) async { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (accountId != null) { final arguments = DestinationPickerArguments( @@ -180,7 +180,7 @@ class MailboxCreatorController extends BaseController { } void createNewMailbox(BuildContext context) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); final nameMailbox = newNameMailbox.value; final nameValidated = getErrorInputNameString(context); @@ -203,7 +203,7 @@ class MailboxCreatorController extends BaseController { } void closeMailboxCreator(BuildContext context) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (BuildUtils.isWeb) { onDismissMailboxCreator?.call(); diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 257080dd4..81b6780bc 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -531,7 +531,7 @@ class MailboxDashBoardController extends ReloadableController { clearFilterMessageOption(); searchController.updateFilterEmail(text: SearchQuery(value)); dispatchAction(StartSearchEmailAction()); - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (_searchInsideEmailDetailedViewIsActive(context)) { _closeEmailDetailedView(); } diff --git a/lib/features/manage_account/presentation/forward/forward_controller.dart b/lib/features/manage_account/presentation/forward/forward_controller.dart index 71dd44634..5f6bea7d9 100644 --- a/lib/features/manage_account/presentation/forward/forward_controller.dart +++ b/lib/features/manage_account/presentation/forward/forward_controller.dart @@ -3,6 +3,7 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -233,7 +234,7 @@ class ForwardController extends BaseController { } void addRecipientAction(BuildContext context, List listRecipientsSelected) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); final accountId = accountDashBoardController.accountId.value; if (accountId != null) { diff --git a/lib/features/manage_account/presentation/vacation/vacation_controller.dart b/lib/features/manage_account/presentation/vacation/vacation_controller.dart index 93712f2a5..04fb962fa 100644 --- a/lib/features/manage_account/presentation/vacation/vacation_controller.dart +++ b/lib/features/manage_account/presentation/vacation/vacation_controller.dart @@ -239,7 +239,7 @@ class VacationController extends BaseController { } void saveVacation(BuildContext context) async { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (vacationPresentation.value.isEnabled) { final fromDate = vacationPresentation.value.fromDate; @@ -346,7 +346,7 @@ class VacationController extends BaseController { if (!BuildUtils.isWeb) { richTextControllerForMobile.htmlEditorApi?.unfocus(); } - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); } void backToUniversalSettings(BuildContext context) { diff --git a/lib/features/manage_account/presentation/vacation/vacation_view.dart b/lib/features/manage_account/presentation/vacation/vacation_view.dart index c73e45fd7..ac3d9e9ac 100644 --- a/lib/features/manage_account/presentation/vacation/vacation_view.dart +++ b/lib/features/manage_account/presentation/vacation/vacation_view.dart @@ -445,7 +445,7 @@ class VacationView extends GetWidget with RichTextButtonMixi }, onChangeContent: (String? changed) { controller.updateMessageHtmlText(changed); }, onFocus: () { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); Future.delayed(const Duration(milliseconds: 500), () { controller.richTextControllerForWeb.editorController.setFocus(); }); diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart index e76c7fa38..0c28c12b5 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart @@ -1,6 +1,7 @@ import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/build_utils.dart'; import 'package:flutter/cupertino.dart'; @@ -248,7 +249,7 @@ class RulesFilterCreatorController extends BaseMailboxController { } void createNewRuleFilter(BuildContext context) async { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); final errorName = _getErrorStringByInputValue(context, _newRuleName); if (errorName?.isNotEmpty == true) { @@ -341,7 +342,7 @@ class RulesFilterCreatorController extends BaseMailboxController { void closeView(BuildContext context) { _clearAll(); - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (BuildUtils.isWeb) { onDismissRuleFilterCreator?.call(); diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart index 4c4b6390c..e4885f917 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart @@ -230,7 +230,7 @@ class RuleFilterCreatorView extends GetWidget { value: controller.mailboxSelected.value, borderColor: _getBorderColorMailboxSelected(), tapActionCallback: (value) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); controller.selectMailbox(context); }))), ]) @@ -390,7 +390,7 @@ class RuleFilterCreatorView extends GetWidget { value: controller.mailboxSelected.value, borderColor: _getBorderColorMailboxSelected(), tapActionCallback: (value) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); controller.selectMailbox(context); }))), ]) @@ -493,7 +493,7 @@ class RuleFilterCreatorView extends GetWidget { return RuleFilterButtonField( value: controller.ruleConditionFieldSelected.value, tapActionCallback: (value) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); controller.openContextMenuAction( context, _bottomSheetRuleConditionFieldActionTiles( @@ -508,7 +508,7 @@ class RuleFilterCreatorView extends GetWidget { return RuleFilterButtonField( value: controller.ruleConditionComparatorSelected.value, tapActionCallback: (value) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); controller.openContextMenuAction( context, _bottomSheetRuleConditionComparatorActionTiles( @@ -553,7 +553,7 @@ class RuleFilterCreatorView extends GetWidget { return RuleFilterButtonField( value: controller.emailRuleFilterActionSelected.value, tapActionCallback: (value) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); controller.openContextMenuAction( context, _bottomSheetActionRuleFilterActionTiles( @@ -579,7 +579,7 @@ class RuleFilterCreatorView extends GetWidget { value: controller.mailboxSelected.value, borderColor: _getBorderColorMailboxSelected(), tapActionCallback: (value) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); controller.selectMailbox(context); })) ]) diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index 70cc19dbf..4a092fbef 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -1,6 +1,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/build_utils.dart'; import 'package:dartz/dartz.dart'; @@ -282,7 +283,7 @@ class SearchEmailController extends BaseController } void _searchEmailAction(BuildContext context) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (session != null && accountId != null) { canSearchMore = true; @@ -665,7 +666,7 @@ class SearchEmailController extends BaseController log('SearchEmailController::closeSearchView(): '); clearAllTextInputSearchForm(); clearAllResultSearch(); - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); mailboxDashBoardController.searchController.disableAllSearchEmail(); mailboxDashBoardController.dispatchMailboxUIAction(SelectMailboxDefaultAction()); mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread); diff --git a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart index 961904ff0..b799f8926 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart @@ -4,6 +4,7 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/build_utils.dart'; @@ -189,7 +190,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } void handleSearchButtonPressed(BuildContext context) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); searchMailboxAction(); } @@ -211,7 +212,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } void submitSearchAction(BuildContext context, String query) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); currentSearchQuery.value = query; searchMailboxAction(); } @@ -429,7 +430,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } void openMailboxAction(BuildContext context, PresentationMailbox mailbox) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); dashboardController.openMailboxAction(context, mailbox); if (!responsiveUtils.isWebDesktop(context)) { @@ -602,7 +603,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } void closeSearchView(BuildContext context) { - FocusScope.of(context).unfocus(); + KeyboardUtils.hideKeyboard(context); if (BuildUtils.isWeb) { dashboardController.searchMailboxActivated.value = false; clearAllTextInputSearchForm(); diff --git a/lib/main/bindings/core/core_bindings.dart b/lib/main/bindings/core/core_bindings.dart index 3d53992ee..1d22054da 100644 --- a/lib/main/bindings/core/core_bindings.dart +++ b/lib/main/bindings/core/core_bindings.dart @@ -1,4 +1,9 @@ -import 'package:core/core.dart'; +import 'package:core/data/utils/compress_file_utils.dart'; +import 'package:core/data/utils/device_manager.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:core/utils/config/app_config_loader.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get/get.dart'; @@ -14,7 +19,6 @@ class CoreBindings extends Bindings { await _bindingSharePreference(); _bindingAppImagePaths(); _bindingResponsiveManager(); - _bindingKeyboardManager(); _bindingTransformer(); _bindingToast(); _bindingDeviceManager(); @@ -34,10 +38,6 @@ class CoreBindings extends Bindings { await Get.putAsync(() async => await SharedPreferences.getInstance(), permanent: true); } - void _bindingKeyboardManager() { - Get.put(KeyboardUtils()); - } - void _bindingTransformer() { Get.put(HtmlAnalyzer()); }