TF-153 Mark as spam when hover email in thread view

This commit is contained in:
dab246
2022-04-15 17:53:53 +07:00
committed by Dat H. Pham
parent f5648cc7f7
commit cfce89fffd
8 changed files with 197 additions and 71 deletions
+2 -1
View File
@@ -3,8 +3,9 @@ import 'package:core/core.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
import 'package:tmail_ui_user/features/base/mixin/popup_context_menu_action_mixin.dart';
abstract class BaseController extends GetxController with MessageDialogActionMixin { abstract class BaseController extends GetxController with MessageDialogActionMixin, PopupContextMenuActionMixin {
final viewState = Rx<Either<Failure, Success>>(Right(UIState.idle)); final viewState = Rx<Either<Failure, Success>>(Right(UIState.idle));
final connectivityResult = Rxn<ConnectivityResult>(); final connectivityResult = Rxn<ConnectivityResult>();
@@ -0,0 +1,35 @@
import 'package:core/core.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
mixin PopupContextMenuActionMixin {
void openContextMenuAction(BuildContext context, List<Widget> actionTiles, {Widget? cancelButton}) {
(CupertinoActionSheetBuilder(context)
..addTiles(actionTiles)
..addCancelButton(cancelButton ?? buildCancelButton(context)))
.show();
}
void openPopupMenuAction(BuildContext context, RelativeRect? position, List<PopupMenuEntry> popupMenuItems) async {
await showMenu(
context: context,
position: position ?? RelativeRect.fromLTRB(16, 40, 16, 16),
color: Colors.white,
elevation: 5,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
items: popupMenuItems);
}
Widget buildCancelButton(BuildContext context) {
return CupertinoActionSheetAction(
child: Text(
AppLocalizations.of(context).cancel,
style: TextStyle(fontWeight: FontWeight.w500, fontSize: 20, color: AppColor.colorTextButton)),
onPressed: () => popBack(),
);
}
}
@@ -505,23 +505,6 @@ class EmailController extends BaseController {
} }
} }
void openMoreMenuEmailAction(BuildContext context, List<Widget> actionTiles, {Widget? cancelButton}) {
(CupertinoActionSheetBuilder(context)
..addTiles(actionTiles)
..addCancelButton(cancelButton))
.show();
}
void openMoreMenuEmailActionForTablet(BuildContext context, RelativeRect? position, List<PopupMenuEntry> popupMenuItems) async {
await showMenu(
context: context,
position: position ?? RelativeRect.fromLTRB(16, 40, 16, 16),
color: Colors.white,
elevation: 5,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
items: popupMenuItems);
}
void showFullEmailAddress() { void showFullEmailAddress() {
isDisplayFullEmailAddress.value = true; isDisplayFullEmailAddress.value = true;
} }
@@ -625,10 +608,6 @@ class EmailController extends BaseController {
mailboxDashBoardController.deleteEmailPermanently(email); mailboxDashBoardController.deleteEmailPermanently(email);
} }
void closeMoreMenu() {
popBack();
}
void backToThreadView(BuildContext context) { void backToThreadView(BuildContext context) {
mailboxDashBoardController.clearSelectedEmail(); mailboxDashBoardController.clearSelectedEmail();
if (responsiveUtils.isDesktop(context) || responsiveUtils.isTabletLarge(context)) { if (responsiveUtils.isDesktop(context) || responsiveUtils.isTabletLarge(context)) {
@@ -126,8 +126,8 @@ class EmailView extends GetView with UserSettingPopupMenuMixin, NetworkConnectio
..onBackActionClick(() => emailController.backToThreadView(context)) ..onBackActionClick(() => emailController.backToThreadView(context))
..addOnEmailActionClick((email, action) => emailController.handleEmailAction(context, email, action)) ..addOnEmailActionClick((email, action) => emailController.handleEmailAction(context, email, action))
..addOnMoreActionClick((email, position) => responsiveUtils.isMobile(context) ..addOnMoreActionClick((email, position) => responsiveUtils.isMobile(context)
? emailController.openMoreMenuEmailAction(context, _emailActionMoreActionTile(context, email), cancelButton: _buildCancelButton(context)) ? emailController.openContextMenuAction(context, _emailActionMoreActionTile(context, email))
: emailController.openMoreMenuEmailActionForTablet(context, position, _popupMenuEmailActionTile(context, email)))) : emailController.openPopupMenuAction(context, position, _popupMenuEmailActionTile(context, email))))
.build())); .build()));
} }
@@ -548,15 +548,6 @@ class EmailView extends GetView with UserSettingPopupMenuMixin, NetworkConnectio
]; ];
} }
Widget _buildCancelButton(BuildContext context) {
return CupertinoActionSheetAction(
child: Text(
AppLocalizations.of(context).cancel,
style: TextStyle(fontWeight: FontWeight.w500, fontSize: 20, color: AppColor.colorTextButton)),
onPressed: () => emailController.closeMoreMenu(),
);
}
Widget _markAsEmailUnreadAction(BuildContext context, PresentationEmail email) { Widget _markAsEmailUnreadAction(BuildContext context, PresentationEmail email) {
return (EmailActionCupertinoActionSheetActionBuilder( return (EmailActionCupertinoActionSheetActionBuilder(
Key('mark_as_unread_action'), Key('mark_as_unread_action'),
@@ -630,7 +630,7 @@ class ThreadController extends BaseController {
final newCurrentMailboxId = destinationMailboxId; final newCurrentMailboxId = destinationMailboxId;
final newDestinationMailboxId = currentMailboxId; final newDestinationMailboxId = currentMailboxId;
if (newCurrentMailboxId != null && newDestinationMailboxId != null) { if (newCurrentMailboxId != null && newDestinationMailboxId != null) {
_revertedToOriginalMailbox(MoveToMailboxRequest( _revertedSelectionEmailToOriginalMailbox(MoveToMailboxRequest(
movedEmailIds, movedEmailIds,
newCurrentMailboxId, newCurrentMailboxId,
newDestinationMailboxId, newDestinationMailboxId,
@@ -703,7 +703,7 @@ class ThreadController extends BaseController {
} }
} }
void _revertedToOriginalMailbox(MoveToMailboxRequest newMoveRequest) { void _revertedSelectionEmailToOriginalMailbox(MoveToMailboxRequest newMoveRequest) {
if (_accountId != null) { if (_accountId != null) {
consumeState(_moveMultipleEmailToMailboxInteractor.execute(_accountId!, newMoveRequest)); consumeState(_moveMultipleEmailToMailboxInteractor.execute(_accountId!, newMoveRequest));
} }
@@ -890,20 +890,28 @@ class ThreadController extends BaseController {
markAsStarEmail(selectedEmail, MarkStarAction.unMarkStar); markAsStarEmail(selectedEmail, MarkStarAction.unMarkStar);
break; break;
case EmailActionType.moveToMailbox: case EmailActionType.moveToMailbox:
moveToMailboxAction(context, selectedEmail); moveToMailbox(context, selectedEmail);
break; break;
case EmailActionType.moveToTrash: case EmailActionType.moveToTrash:
moveToTrashAction(selectedEmail); moveToTrash(selectedEmail);
break; break;
case EmailActionType.deletePermanently: case EmailActionType.deletePermanently:
deleteEmailPermanently(context, selectedEmail); deleteEmailPermanently(context, selectedEmail);
break; break;
case EmailActionType.moveToSpam:
popBack();
moveToSpam(selectedEmail);
break;
case EmailActionType.unSpam:
popBack();
unSpam(selectedEmail);
break;
default: default:
break; break;
} }
} }
void moveToMailboxAction(BuildContext context, PresentationEmail email) async { void moveToMailbox(BuildContext context, PresentationEmail email) async {
final currentMailbox = mailboxDashBoardController.selectedMailbox.value; final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
@@ -914,15 +922,22 @@ class ThreadController extends BaseController {
); );
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) { if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
if (destinationMailbox.role == PresentationMailbox.roleTrash) { if (destinationMailbox.isTrash) {
_moveToTrash(accountId, MoveToMailboxRequest( _moveToTrashAction(accountId, MoveToMailboxRequest(
[email.id], [email.id],
currentMailbox.id, currentMailbox.id,
destinationMailbox.id, destinationMailbox.id,
MoveAction.moving, MoveAction.moving,
EmailActionType.moveToTrash)); EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) {
_moveToSpamAction(accountId, MoveToMailboxRequest(
[email.id],
currentMailbox.id,
destinationMailbox.id,
MoveAction.moving,
EmailActionType.moveToSpam));
} else { } else {
_moveToMailbox(accountId, MoveToMailboxRequest( _moveToMailboxAction(accountId, MoveToMailboxRequest(
[email.id], [email.id],
currentMailbox.id, currentMailbox.id,
destinationMailbox.id, destinationMailbox.id,
@@ -934,7 +949,7 @@ class ThreadController extends BaseController {
} }
} }
void _moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) { void _moveToMailboxAction(AccountId accountId, MoveToMailboxRequest moveRequest) {
consumeState(_moveToMailboxInteractor.execute(accountId, moveRequest)); consumeState(_moveToMailboxInteractor.execute(accountId, moveRequest));
} }
@@ -945,37 +960,36 @@ class ThreadController extends BaseController {
_appToast.showToastWithAction( _appToast.showToastWithAction(
currentOverlayContext!, currentOverlayContext!,
AppLocalizations.of(currentContext!).moved_to_mailbox(success.destinationPath ?? ''), AppLocalizations.of(currentContext!).moved_to_mailbox(success.destinationPath ?? ''),
AppLocalizations.of(currentContext!).undo_action, AppLocalizations.of(currentContext!).undo_action, () {
() { _revertedToOriginalMailbox(MoveToMailboxRequest(
final newMoveRequest = MoveToMailboxRequest(
[success.emailId], [success.emailId],
success.destinationMailboxId, success.destinationMailboxId,
success.currentMailboxId, success.currentMailboxId,
MoveAction.undo, MoveAction.undo,
success.emailActionType); success.emailActionType));
_undoMoveToMailbox(newMoveRequest);
} }
); );
} }
} }
void _undoMoveToMailbox(MoveToMailboxRequest newMoveRequest) { void _revertedToOriginalMailbox(MoveToMailboxRequest newMoveRequest) {
if (_accountId != null) { final accountId = mailboxDashBoardController.accountId.value;
_moveToMailbox(_accountId!, newMoveRequest); if (accountId != null) {
_moveToMailboxAction(accountId, newMoveRequest);
} }
} }
void _moveToTrash(AccountId accountId, MoveToMailboxRequest moveRequest) { void _moveToTrashAction(AccountId accountId, MoveToMailboxRequest moveRequest) {
mailboxDashBoardController.moveToMailbox(accountId, moveRequest); mailboxDashBoardController.moveToMailbox(accountId, moveRequest);
} }
void moveToTrashAction(PresentationEmail email) async { void moveToTrash(PresentationEmail email) async {
final currentMailbox = mailboxDashBoardController.selectedMailbox.value; final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
final trashMailboxId = mailboxDashBoardController.mapDefaultMailboxId[PresentationMailbox.roleTrash]; final trashMailboxId = mailboxDashBoardController.mapDefaultMailboxId[PresentationMailbox.roleTrash];
if (currentMailbox != null && accountId != null && trashMailboxId != null) { if (currentMailbox != null && accountId != null && trashMailboxId != null) {
_moveToTrash(accountId, MoveToMailboxRequest( _moveToTrashAction(accountId, MoveToMailboxRequest(
[email.id], [email.id],
currentMailbox.id, currentMailbox.id,
trashMailboxId, trashMailboxId,
@@ -985,6 +999,42 @@ class ThreadController extends BaseController {
} }
} }
void moveToSpam(PresentationEmail email) async {
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
final accountId = mailboxDashBoardController.accountId.value;
final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam);
if (currentMailbox != null && accountId != null && spamMailboxId != null) {
_moveToSpamAction(accountId, MoveToMailboxRequest(
[email.id],
currentMailbox.id,
spamMailboxId,
MoveAction.moving,
EmailActionType.moveToSpam)
);
}
}
void unSpam(PresentationEmail email) async {
final accountId = mailboxDashBoardController.accountId.value;
final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam);
final inboxMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleInbox);
if (inboxMailboxId != null && accountId != null && spamMailboxId != null) {
_moveToSpamAction(accountId, MoveToMailboxRequest(
[email.id],
spamMailboxId,
inboxMailboxId,
MoveAction.moving,
EmailActionType.unSpam)
);
}
}
void _moveToSpamAction(AccountId accountId, MoveToMailboxRequest moveRequest) {
mailboxDashBoardController.moveToMailbox(accountId, moveRequest);
}
void deleteEmailPermanently(BuildContext context, PresentationEmail email) { void deleteEmailPermanently(BuildContext context, PresentationEmail email) {
if (_responsiveUtils.isMobile(context)) { if (_responsiveUtils.isMobile(context)) {
(ConfirmationDialogActionSheetBuilder(context) (ConfirmationDialogActionSheetBuilder(context)
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/user_setting_popup_menu_mixin.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/user_setting_popup_menu_mixin.dart';
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart'; import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart'; import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
@@ -600,7 +601,7 @@ class ThreadView extends GetWidget<ThreadController> with UserSettingPopupMenuMi
physics: AlwaysScrollableScrollPhysics(), physics: AlwaysScrollableScrollPhysics(),
key: PageStorageKey('list_presentation_email_in_threads'), key: PageStorageKey('list_presentation_email_in_threads'),
itemCount: listPresentationEmail.length, itemCount: listPresentationEmail.length,
padding: EdgeInsets.zero, padding: EdgeInsets.only(top: kIsWeb && !_responsiveUtils.isDesktop(context) ? 10 : 0),
itemBuilder: (context, index) => Obx(() => (EmailTileBuilder( itemBuilder: (context, index) => Obx(() => (EmailTileBuilder(
context, context,
listPresentationEmail[index], listPresentationEmail[index],
@@ -608,7 +609,10 @@ class ThreadView extends GetWidget<ThreadController> with UserSettingPopupMenuMi
controller.currentSelectMode.value, controller.currentSelectMode.value,
controller.mailboxDashBoardController.searchState.value.searchStatus, controller.mailboxDashBoardController.searchState.value.searchStatus,
controller.searchQuery) controller.searchQuery)
..addOnPressEmailActionClick((action, email) => controller.pressEmailAction(context, action, email))) ..addOnPressEmailActionClick((action, email) => controller.pressEmailAction(context, action, email))
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email))))
.build()), .build()),
) )
); );
@@ -703,4 +707,40 @@ class ThreadView extends GetWidget<ThreadController> with UserSettingPopupMenuMi
]), ]),
); );
} }
List<Widget> _contextMenuActionTile(BuildContext context, PresentationEmail email) {
return <Widget>[
_markAsEmailSpamOrUnSpamAction(context, email),
];
}
Widget _markAsEmailSpamOrUnSpamAction(BuildContext context, PresentationEmail email) {
return (EmailActionCupertinoActionSheetActionBuilder(
Key('mark_as_spam_or_un_spam_action'),
SvgPicture.asset(
controller.currentMailbox?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam,
width: 28, height: 28, fit: BoxFit.fill, color: AppColor.colorTextButton),
controller.currentMailbox?.isSpam == true
? AppLocalizations.of(context).remove_from_spam
: AppLocalizations.of(context).mark_as_spam,
email,
iconLeftPadding: _responsiveUtils.isMobile(context)
? EdgeInsets.only(left: 12, right: 16)
: EdgeInsets.only(right: 12),
iconRightPadding: _responsiveUtils.isMobile(context)
? EdgeInsets.only(right: 12)
: EdgeInsets.zero)
..onActionClick((email) => controller.pressEmailAction(context,
controller.currentMailbox?.isSpam == true
? EmailActionType.unSpam
: EmailActionType.moveToSpam,
email)))
.build();
}
List<PopupMenuEntry> _popupMenuActionTile(BuildContext context, PresentationEmail email) {
return [
PopupMenuItem(padding: EdgeInsets.symmetric(horizontal: 8), child: _markAsEmailSpamOrUnSpamAction(context, email)),
];
}
} }
@@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/thread/presentation/model/search_status.d
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
typedef OnPressEmailActionClick = void Function(EmailActionType, PresentationEmail); typedef OnPressEmailActionClick = void Function(EmailActionType, PresentationEmail);
typedef OnMoreActionClick = void Function(PresentationEmail, RelativeRect?);
class EmailTileBuilder { class EmailTileBuilder {
@@ -23,6 +24,7 @@ class EmailTileBuilder {
final SearchQuery? _searchQuery; final SearchQuery? _searchQuery;
OnPressEmailActionClick? _emailActionClick; OnPressEmailActionClick? _emailActionClick;
OnMoreActionClick? _onMoreActionClick;
bool isHoverItem = false; bool isHoverItem = false;
bool isHoverItemSelected = false; bool isHoverItemSelected = false;
@@ -40,6 +42,10 @@ class EmailTileBuilder {
_emailActionClick = actionClick; _emailActionClick = actionClick;
} }
void addOnMoreActionClick(OnMoreActionClick onMoreActionClick) {
_onMoreActionClick = onMoreActionClick;
}
Widget build() { Widget build() {
return Theme( return Theme(
key: Key('thread_tile'), key: Key('thread_tile'),
@@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/thread/presentation/model/search_status.d
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
typedef OnPressEmailActionClick = void Function(EmailActionType, PresentationEmail); typedef OnPressEmailActionClick = void Function(EmailActionType, PresentationEmail);
typedef OnMoreActionClick = void Function(PresentationEmail, RelativeRect?);
class EmailTileBuilder { class EmailTileBuilder {
@@ -23,6 +24,7 @@ class EmailTileBuilder {
final SearchQuery? _searchQuery; final SearchQuery? _searchQuery;
OnPressEmailActionClick? _emailActionClick; OnPressEmailActionClick? _emailActionClick;
OnMoreActionClick? _onMoreActionClick;
bool isHoverItem = false; bool isHoverItem = false;
@@ -39,6 +41,10 @@ class EmailTileBuilder {
_emailActionClick = actionClick; _emailActionClick = actionClick;
} }
void addOnMoreActionClick(OnMoreActionClick onMoreActionClick) {
_onMoreActionClick = onMoreActionClick;
}
Widget build() { Widget build() {
return Theme( return Theme(
key: Key('thread_tile'), key: Key('thread_tile'),
@@ -398,38 +404,56 @@ class EmailTileBuilder {
icon: SvgPicture.asset( icon: SvgPicture.asset(
_presentationEmail.hasRead ? _imagePaths.icRead : _imagePaths.icUnread, _presentationEmail.hasRead ? _imagePaths.icRead : _imagePaths.icUnread,
color: AppColor.colorActionButtonHover, color: AppColor.colorActionButtonHover,
width: _responsiveUtils.isDesktop(_context) ? 16 : 14, width: 16,
height: _responsiveUtils.isDesktop(_context) ? 16 : 14, height: 16,
fit: BoxFit.fill), fit: BoxFit.fill),
splashRadius: _responsiveUtils.isDesktop(_context) ? 15 : 10,
tooltip: _presentationEmail.hasRead ? AppLocalizations.of(_context).mark_as_unread : AppLocalizations.of(_context).mark_as_read, tooltip: _presentationEmail.hasRead ? AppLocalizations.of(_context).mark_as_unread : AppLocalizations.of(_context).mark_as_read,
onTap: () => _emailActionClick?.call( onTap: () => _emailActionClick?.call(
_presentationEmail.hasRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead, _presentationEmail.hasRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
_presentationEmail)), _presentationEmail)),
buildIconWeb( if (_mailboxRole != PresentationMailbox.roleDrafts)
icon: SvgPicture.asset( buildIconWeb(
_imagePaths.icMove, icon: SvgPicture.asset(
width: _responsiveUtils.isDesktop(_context) ? 16 : 14, _imagePaths.icMove,
height: _responsiveUtils.isDesktop(_context) ? 16 : 14, width: 16,
color: AppColor.colorActionButtonHover, height: 16,
fit: BoxFit.fill), color: AppColor.colorActionButtonHover,
splashRadius: _responsiveUtils.isDesktop(_context) ? 15 : 10, fit: BoxFit.fill),
tooltip: AppLocalizations.of(_context).move, tooltip: AppLocalizations.of(_context).move,
onTap: () => _emailActionClick?.call(EmailActionType.moveToMailbox, _presentationEmail)), onTap: () => _emailActionClick?.call(EmailActionType.moveToMailbox, _presentationEmail)),
buildIconWeb( buildIconWeb(
icon: SvgPicture.asset( icon: SvgPicture.asset(
_imagePaths.icDelete, _imagePaths.icDelete,
width: _responsiveUtils.isDesktop(_context) ? 16 : 14, width: 16,
height: _responsiveUtils.isDesktop(_context) ? 16 : 14, height: 16,
color: AppColor.colorActionButtonHover, color: AppColor.colorActionButtonHover,
fit: BoxFit.fill), fit: BoxFit.fill),
splashRadius: _responsiveUtils.isDesktop(_context) ? 15 : 10,
tooltip: _mailboxRole != PresentationMailbox.roleTrash tooltip: _mailboxRole != PresentationMailbox.roleTrash
? AppLocalizations.of(_context).move_to_trash ? AppLocalizations.of(_context).move_to_trash
: AppLocalizations.of(_context).delete_permanently, : AppLocalizations.of(_context).delete_permanently,
onTap: () => _emailActionClick?.call( onTap: () => _emailActionClick?.call(
_mailboxRole != PresentationMailbox.roleTrash ? EmailActionType.moveToTrash : EmailActionType.deletePermanently, _mailboxRole != PresentationMailbox.roleTrash ? EmailActionType.moveToTrash : EmailActionType.deletePermanently,
_presentationEmail)), _presentationEmail)),
if (_mailboxRole != PresentationMailbox.roleDrafts)
buildIconWebHasPosition(
_context,
icon: SvgPicture.asset(
_imagePaths.icMore,
width: 16,
height: 16,
color: AppColor.colorActionButtonHover,
fit: BoxFit.fill),
tooltip: AppLocalizations.of(_context).more,
onTap: () {
if (_responsiveUtils.isMobile(_context)) {
_onMoreActionClick?.call(_presentationEmail, null);
}
},
onTapDown: (position) {
if (!_responsiveUtils.isMobile(_context)) {
_onMoreActionClick?.call(_presentationEmail, position);
}
}),
if (_responsiveUtils.isDesktop(_context)) SizedBox(width: 16), if (_responsiveUtils.isDesktop(_context)) SizedBox(width: 16),
]); ]);
} }