From c435529ce497b52fed1b734e3ac2a9e009b00df6 Mon Sep 17 00:00:00 2001 From: DatDang Date: Mon, 4 Aug 2025 10:07:12 +0700 Subject: [PATCH] TF-3936 Thread Detail Hide app bar icon when disabled --- .../presentation/thread_detail_view.dart | 1 + .../widgets/thread_detail_app_bar.dart | 80 ++++++++++++------- 2 files changed, 50 insertions(+), 31 deletions(-) diff --git a/lib/features/thread_detail/presentation/thread_detail_view.dart b/lib/features/thread_detail/presentation/thread_detail_view.dart index b3356efbe..5c84b7ca0 100644 --- a/lib/features/thread_detail/presentation/thread_detail_view.dart +++ b/lib/features/thread_detail/presentation/thread_detail_view.dart @@ -44,6 +44,7 @@ class ThreadDetailView extends GetWidget { closeThreadDetailAction: controller.closeThreadDetailAction, lastEmailOfThread: controller.emailIdsPresentation.values.lastOrNull, ownUserName: controller.session?.getOwnEmailAddress() ?? '', + isThreadDetailEnabled: controller.isThreadDetailEnabled, mailboxContain: _getMailboxContain(), onEmailActionClick: isLoading ? null diff --git a/lib/features/thread_detail/presentation/widgets/thread_detail_app_bar.dart b/lib/features/thread_detail/presentation/widgets/thread_detail_app_bar.dart index 28a60df8c..127174338 100644 --- a/lib/features/thread_detail/presentation/widgets/thread_detail_app_bar.dart +++ b/lib/features/thread_detail/presentation/widgets/thread_detail_app_bar.dart @@ -23,6 +23,7 @@ class ThreadDetailAppBar extends StatelessWidget { required this.closeThreadDetailAction, required this.lastEmailOfThread, required this.ownUserName, + required this.isThreadDetailEnabled, this.mailboxContain, this.optionWidgets = const [], this.onEmailActionClick, @@ -35,6 +36,7 @@ class ThreadDetailAppBar extends StatelessWidget { final void Function(BuildContext context) closeThreadDetailAction; final PresentationEmail? lastEmailOfThread; final String ownUserName; + final bool isThreadDetailEnabled; final PresentationMailbox? mailboxContain; final List optionWidgets; final OnEmailActionClick? onEmailActionClick; @@ -84,50 +86,42 @@ class ThreadDetailAppBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.end, children: [ if (_supportDisplayMailboxNameTitle(context)) backButton, - if (lastEmailOfThread != null) ...[ - TMailButtonWidget.fromIcon( + if (lastEmailOfThread != null && isThreadDetailEnabled) ...[ + _ThreadDetailAppBarButton( icon: imagePaths.icReply, - iconSize: EmailViewAppBarWidgetStyles.buttonIconSize, - iconColor: EmailViewAppBarWidgetStyles.iconColor, tooltipMessage: AppLocalizations.of(context).reply, - backgroundColor: Colors.transparent, - onTapActionCallback: () => onEmailActionClick?.call( + responsiveUtils: responsiveUtils, + onTapActionCallback: (_) => onEmailActionClick?.call( lastEmailOfThread!, EmailActionType.reply, ), ), if (!responsiveUtils.isMobile(context)) ...[ if (lastEmailOfThread!.getCountMailAddressWithoutMe(ownUserName) > 1) - TMailButtonWidget.fromIcon( + _ThreadDetailAppBarButton( icon: imagePaths.icReplyAll, - iconSize: EmailViewAppBarWidgetStyles.buttonIconSize, - iconColor: EmailViewAppBarWidgetStyles.iconColor, tooltipMessage: AppLocalizations.of(context).reply_all, - backgroundColor: Colors.transparent, - onTapActionCallback: () => onEmailActionClick?.call( + responsiveUtils: responsiveUtils, + onTapActionCallback: (_) => onEmailActionClick?.call( lastEmailOfThread!, EmailActionType.replyAll, ), ), if (isReplyToListEnabled) - TMailButtonWidget.fromIcon( + _ThreadDetailAppBarButton( icon: imagePaths.icReply, - iconSize: EmailViewAppBarWidgetStyles.buttonIconSize, - iconColor: EmailViewAppBarWidgetStyles.iconColor, tooltipMessage: AppLocalizations.of(context).replyToList, - backgroundColor: Colors.transparent, - onTapActionCallback: () => onEmailActionClick?.call( + responsiveUtils: responsiveUtils, + onTapActionCallback: (_) => onEmailActionClick?.call( lastEmailOfThread!, EmailActionType.replyToList, ), ), - TMailButtonWidget.fromIcon( + _ThreadDetailAppBarButton( icon: imagePaths.icForward, - iconSize: EmailViewAppBarWidgetStyles.buttonIconSize, - iconColor: EmailViewAppBarWidgetStyles.iconColor, tooltipMessage: AppLocalizations.of(context).forward, - backgroundColor: Colors.transparent, - onTapActionCallback: () => onEmailActionClick?.call( + responsiveUtils: responsiveUtils, + onTapActionCallback: (_) => onEmailActionClick?.call( lastEmailOfThread!, EmailActionType.forward, ), @@ -140,18 +134,11 @@ class ThreadDetailAppBar extends StatelessWidget { else ...optionWidgets, if (lastEmailOfThread != null) - TMailButtonWidget.fromIcon( + _ThreadDetailAppBarButton( icon: imagePaths.icMoreVertical, - iconSize: EmailViewAppBarWidgetStyles.buttonIconSize, - iconColor: EmailViewAppBarWidgetStyles.iconColor, - backgroundColor: Colors.transparent, tooltipMessage: AppLocalizations.of(context).more, - onTapActionCallback: responsiveUtils.isScreenWithShortestSide(context) && - lastEmailOfThread != null - ? () => onMoreActionClick?.call(lastEmailOfThread!, null) - : null, - onTapActionAtPositionCallback: !responsiveUtils.isScreenWithShortestSide(context) && - lastEmailOfThread != null + responsiveUtils: responsiveUtils, + onTapActionCallback: lastEmailOfThread != null ? (position) => onMoreActionClick?.call(lastEmailOfThread!, position) : null, ), @@ -181,3 +168,34 @@ class ThreadDetailAppBar extends StatelessWidget { return isSupportedDevice || isSearchRunning; } } + +class _ThreadDetailAppBarButton extends StatelessWidget { + const _ThreadDetailAppBarButton({ + required this.icon, + required this.tooltipMessage, + required this.onTapActionCallback, + required this.responsiveUtils, + }); + + final String icon; + final String tooltipMessage; + final void Function(RelativeRect? position)? onTapActionCallback; + final ResponsiveUtils responsiveUtils; + + @override + Widget build(BuildContext context) { + final smallScreen = responsiveUtils.isScreenWithShortestSide(context); + return TMailButtonWidget.fromIcon( + icon: icon, + iconSize: EmailViewAppBarWidgetStyles.buttonIconSize, + iconColor: EmailViewAppBarWidgetStyles.iconColor, + backgroundColor: Colors.transparent, + tooltipMessage: AppLocalizations.of(context).more, + onTapActionCallback: + smallScreen ? () => onTapActionCallback?.call(null) : null, + onTapActionAtPositionCallback: !smallScreen + ? (position) => onTapActionCallback?.call(position) + : null, + ); + } +} \ No newline at end of file