TF-3936 Thread Detail Hide app bar icon when disabled

This commit is contained in:
DatDang
2025-08-04 10:07:12 +07:00
committed by Dat H. Pham
parent 801b08bc90
commit c435529ce4
2 changed files with 50 additions and 31 deletions
@@ -44,6 +44,7 @@ class ThreadDetailView extends GetWidget<ThreadDetailController> {
closeThreadDetailAction: controller.closeThreadDetailAction, closeThreadDetailAction: controller.closeThreadDetailAction,
lastEmailOfThread: controller.emailIdsPresentation.values.lastOrNull, lastEmailOfThread: controller.emailIdsPresentation.values.lastOrNull,
ownUserName: controller.session?.getOwnEmailAddress() ?? '', ownUserName: controller.session?.getOwnEmailAddress() ?? '',
isThreadDetailEnabled: controller.isThreadDetailEnabled,
mailboxContain: _getMailboxContain(), mailboxContain: _getMailboxContain(),
onEmailActionClick: isLoading onEmailActionClick: isLoading
? null ? null
@@ -23,6 +23,7 @@ class ThreadDetailAppBar extends StatelessWidget {
required this.closeThreadDetailAction, required this.closeThreadDetailAction,
required this.lastEmailOfThread, required this.lastEmailOfThread,
required this.ownUserName, required this.ownUserName,
required this.isThreadDetailEnabled,
this.mailboxContain, this.mailboxContain,
this.optionWidgets = const [], this.optionWidgets = const [],
this.onEmailActionClick, this.onEmailActionClick,
@@ -35,6 +36,7 @@ class ThreadDetailAppBar extends StatelessWidget {
final void Function(BuildContext context) closeThreadDetailAction; final void Function(BuildContext context) closeThreadDetailAction;
final PresentationEmail? lastEmailOfThread; final PresentationEmail? lastEmailOfThread;
final String ownUserName; final String ownUserName;
final bool isThreadDetailEnabled;
final PresentationMailbox? mailboxContain; final PresentationMailbox? mailboxContain;
final List<Widget> optionWidgets; final List<Widget> optionWidgets;
final OnEmailActionClick? onEmailActionClick; final OnEmailActionClick? onEmailActionClick;
@@ -84,50 +86,42 @@ class ThreadDetailAppBar extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
children: [ children: [
if (_supportDisplayMailboxNameTitle(context)) backButton, if (_supportDisplayMailboxNameTitle(context)) backButton,
if (lastEmailOfThread != null) ...[ if (lastEmailOfThread != null && isThreadDetailEnabled) ...[
TMailButtonWidget.fromIcon( _ThreadDetailAppBarButton(
icon: imagePaths.icReply, icon: imagePaths.icReply,
iconSize: EmailViewAppBarWidgetStyles.buttonIconSize,
iconColor: EmailViewAppBarWidgetStyles.iconColor,
tooltipMessage: AppLocalizations.of(context).reply, tooltipMessage: AppLocalizations.of(context).reply,
backgroundColor: Colors.transparent, responsiveUtils: responsiveUtils,
onTapActionCallback: () => onEmailActionClick?.call( onTapActionCallback: (_) => onEmailActionClick?.call(
lastEmailOfThread!, lastEmailOfThread!,
EmailActionType.reply, EmailActionType.reply,
), ),
), ),
if (!responsiveUtils.isMobile(context)) ...[ if (!responsiveUtils.isMobile(context)) ...[
if (lastEmailOfThread!.getCountMailAddressWithoutMe(ownUserName) > 1) if (lastEmailOfThread!.getCountMailAddressWithoutMe(ownUserName) > 1)
TMailButtonWidget.fromIcon( _ThreadDetailAppBarButton(
icon: imagePaths.icReplyAll, icon: imagePaths.icReplyAll,
iconSize: EmailViewAppBarWidgetStyles.buttonIconSize,
iconColor: EmailViewAppBarWidgetStyles.iconColor,
tooltipMessage: AppLocalizations.of(context).reply_all, tooltipMessage: AppLocalizations.of(context).reply_all,
backgroundColor: Colors.transparent, responsiveUtils: responsiveUtils,
onTapActionCallback: () => onEmailActionClick?.call( onTapActionCallback: (_) => onEmailActionClick?.call(
lastEmailOfThread!, lastEmailOfThread!,
EmailActionType.replyAll, EmailActionType.replyAll,
), ),
), ),
if (isReplyToListEnabled) if (isReplyToListEnabled)
TMailButtonWidget.fromIcon( _ThreadDetailAppBarButton(
icon: imagePaths.icReply, icon: imagePaths.icReply,
iconSize: EmailViewAppBarWidgetStyles.buttonIconSize,
iconColor: EmailViewAppBarWidgetStyles.iconColor,
tooltipMessage: AppLocalizations.of(context).replyToList, tooltipMessage: AppLocalizations.of(context).replyToList,
backgroundColor: Colors.transparent, responsiveUtils: responsiveUtils,
onTapActionCallback: () => onEmailActionClick?.call( onTapActionCallback: (_) => onEmailActionClick?.call(
lastEmailOfThread!, lastEmailOfThread!,
EmailActionType.replyToList, EmailActionType.replyToList,
), ),
), ),
TMailButtonWidget.fromIcon( _ThreadDetailAppBarButton(
icon: imagePaths.icForward, icon: imagePaths.icForward,
iconSize: EmailViewAppBarWidgetStyles.buttonIconSize,
iconColor: EmailViewAppBarWidgetStyles.iconColor,
tooltipMessage: AppLocalizations.of(context).forward, tooltipMessage: AppLocalizations.of(context).forward,
backgroundColor: Colors.transparent, responsiveUtils: responsiveUtils,
onTapActionCallback: () => onEmailActionClick?.call( onTapActionCallback: (_) => onEmailActionClick?.call(
lastEmailOfThread!, lastEmailOfThread!,
EmailActionType.forward, EmailActionType.forward,
), ),
@@ -140,18 +134,11 @@ class ThreadDetailAppBar extends StatelessWidget {
else else
...optionWidgets, ...optionWidgets,
if (lastEmailOfThread != null) if (lastEmailOfThread != null)
TMailButtonWidget.fromIcon( _ThreadDetailAppBarButton(
icon: imagePaths.icMoreVertical, icon: imagePaths.icMoreVertical,
iconSize: EmailViewAppBarWidgetStyles.buttonIconSize,
iconColor: EmailViewAppBarWidgetStyles.iconColor,
backgroundColor: Colors.transparent,
tooltipMessage: AppLocalizations.of(context).more, tooltipMessage: AppLocalizations.of(context).more,
onTapActionCallback: responsiveUtils.isScreenWithShortestSide(context) && responsiveUtils: responsiveUtils,
lastEmailOfThread != null onTapActionCallback: lastEmailOfThread != null
? () => onMoreActionClick?.call(lastEmailOfThread!, null)
: null,
onTapActionAtPositionCallback: !responsiveUtils.isScreenWithShortestSide(context) &&
lastEmailOfThread != null
? (position) => onMoreActionClick?.call(lastEmailOfThread!, position) ? (position) => onMoreActionClick?.call(lastEmailOfThread!, position)
: null, : null,
), ),
@@ -181,3 +168,34 @@ class ThreadDetailAppBar extends StatelessWidget {
return isSupportedDevice || isSearchRunning; 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,
);
}
}