From b72048788a29d677015e1fa16cdfa706c322f82f Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 8 Aug 2025 09:30:50 +0700 Subject: [PATCH] TF-3952 Clear recipient input focus after perform any actions Signed-off-by: dab246 --- .../forward/forward_controller.dart | 18 ++++++++++++++++-- .../presentation/forward/forward_view.dart | 17 +++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/lib/features/manage_account/presentation/forward/forward_controller.dart b/lib/features/manage_account/presentation/forward/forward_controller.dart index 780c8070e..7e4277ae1 100644 --- a/lib/features/manage_account/presentation/forward/forward_controller.dart +++ b/lib/features/manage_account/presentation/forward/forward_controller.dart @@ -1,7 +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/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:forward/forward/tmail_forward.dart'; import 'package:get/get.dart'; @@ -119,6 +119,8 @@ class ForwardController extends BaseController { } void deleteRecipients(BuildContext context, String emailAddress) { + clearInputFocus(); + showConfirmDialogAction( context, title: AppLocalizations.of(context).deleteRecipient, @@ -180,6 +182,8 @@ class ForwardController extends BaseController { }); void selectRecipientForward(RecipientForward recipientForward) { + clearInputFocus(); + if (selectionMode.value == SelectMode.INACTIVE) { selectionMode.value = SelectMode.ACTIVE; } @@ -204,6 +208,8 @@ class ForwardController extends BaseController { } void deleteMultipleRecipients(BuildContext context, Set listEmailAddress) { + clearInputFocus(); + showConfirmDialogAction( context, title: AppLocalizations.of(context).deleteRecipient, @@ -228,7 +234,7 @@ class ForwardController extends BaseController { } void addRecipientAction(BuildContext context, List listRecipientsSelected) { - KeyboardUtils.hideKeyboard(context); + clearInputFocus(); final accountId = accountDashBoardController.accountId.value; if (accountId != null) { @@ -263,6 +269,8 @@ class ForwardController extends BaseController { } void handleEditLocalCopy() { + clearInputFocus(); + final accountId = accountDashBoardController.accountId.value; if (accountId != null && currentForward.value != null && @@ -320,4 +328,10 @@ class ForwardController extends BaseController { : BannerState.disabled; log('ForwardController::_updateForwardWarningBannerState: forwardWarningBannerState = ${forwardWarningBannerState.value}'); } + + void clearInputFocus() { + if (PlatformInfo.isMobile) { + FocusManager.instance.primaryFocus?.unfocus(); + } + } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/forward/forward_view.dart b/lib/features/manage_account/presentation/forward/forward_view.dart index ec01b2207..831d2b9f9 100644 --- a/lib/features/manage_account/presentation/forward/forward_view.dart +++ b/lib/features/manage_account/presentation/forward/forward_view.dart @@ -1,6 +1,7 @@ import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:core/presentation/utils/theme_utils.dart'; +import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; @@ -26,7 +27,7 @@ class ForwardView extends GetWidget with AppLoaderMixin { Widget build(BuildContext context) { final isWebDesktop = controller.responsiveUtils.isWebDesktop(context); - return Column( + final bodyWidget = Column( children: [ Obx(() { if (controller.forwardWarningBannerState.value == BannerState.enabled) { @@ -128,6 +129,15 @@ class ForwardView extends GetWidget with AppLoaderMixin { ), ], ); + + if (PlatformInfo.isMobile) { + return GestureDetector( + onTap: controller.clearInputFocus, + child: bodyWidget, + ); + } else { + return bodyWidget; + } } EdgeInsetsGeometry _getScrollViewPadding( @@ -147,7 +157,10 @@ class ForwardView extends GetWidget with AppLoaderMixin { return Obx(() => controller.viewState.value.fold( (failure) => const SizedBox.shrink(), (success) => success is LoadingState - ? loadingWidget + ? Padding( + padding: const EdgeInsets.only(top: 8.0), + child: loadingWidget, + ) : const SizedBox.shrink() )); }