diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index cd71641ca..3605662c2 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -81,8 +81,6 @@ class EmailController extends BaseController with AppLoaderMixin { StreamController>.broadcast(); Stream> get downloadProgressState => _downloadProgressStateController.stream; - PresentationMailbox? get currentMailbox => mailboxDashBoardController.selectedMailbox.value; - PresentationEmail? get currentEmail => mailboxDashBoardController.selectedEmail.value; EmailController( @@ -240,9 +238,15 @@ class EmailController extends BaseController with AppLoaderMixin { bool get isExpandEmailAddress => emailAddressExpandMode.value == ExpandMode.EXPAND; + PresentationMailbox? getMailboxContain(PresentationEmail email) { + return mailboxDashBoardController.searchController.isSearchEmailRunning + ? email.findMailboxContain(mailboxDashBoardController.mapMailbox) + : mailboxDashBoardController.selectedMailbox.value; + } + void markAsEmailRead(PresentationEmail presentationEmail, ReadActions readActions) async { final accountId = mailboxDashBoardController.accountId.value; - final mailboxCurrent = mailboxDashBoardController.selectedMailbox.value; + final mailboxCurrent = getMailboxContain(presentationEmail); if (accountId != null && mailboxCurrent != null) { consumeState(_markAsEmailReadInteractor.execute(accountId, presentationEmail.toEmail(), readActions)); } @@ -432,7 +436,7 @@ class EmailController extends BaseController with AppLoaderMixin { } void moveToMailbox(BuildContext context, PresentationEmail email) async { - final currentMailbox = mailboxDashBoardController.selectedMailbox.value; + final currentMailbox = getMailboxContain(email); final accountId = mailboxDashBoardController.accountId.value; if (currentMailbox != null && accountId != null) { @@ -503,11 +507,12 @@ class EmailController extends BaseController with AppLoaderMixin { void moveToTrash(BuildContext context, PresentationEmail email) async { final accountId = mailboxDashBoardController.accountId.value; final trashMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleTrash); + final currentMailbox = getMailboxContain(email); if (accountId != null && currentMailbox != null && trashMailboxId != null) { _moveToTrashAction(context, accountId, MoveToMailboxRequest( [email.id], - currentMailbox!.id, + currentMailbox.id, trashMailboxId, MoveAction.moving, EmailActionType.moveToTrash) @@ -523,11 +528,12 @@ class EmailController extends BaseController with AppLoaderMixin { void moveToSpam(BuildContext context, PresentationEmail email) async { final accountId = mailboxDashBoardController.accountId.value; final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam); + final currentMailbox = getMailboxContain(email); if (accountId != null && currentMailbox != null && spamMailboxId != null) { _moveToSpamAction(context, accountId, MoveToMailboxRequest( [email.id], - currentMailbox!.id, + currentMailbox.id, spamMailboxId, MoveAction.moving, EmailActionType.moveToSpam) @@ -558,7 +564,7 @@ class EmailController extends BaseController with AppLoaderMixin { void markAsStarEmail(PresentationEmail presentationEmail, MarkStarAction markStarAction) async { final accountId = mailboxDashBoardController.accountId.value; - final mailboxCurrent = mailboxDashBoardController.selectedMailbox.value; + final mailboxCurrent = getMailboxContain(presentationEmail); if (accountId != null && mailboxCurrent != null) { consumeState(_markAsStarEmailInteractor.execute(accountId, presentationEmail.toEmail(), markStarAction)); } diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index ef08b2c18..c3bb3f567 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -127,9 +127,9 @@ class EmailView extends GetWidget with NetworkConnectionMixin { padding: const EdgeInsets.only(top: 6), child: AppBarMailWidgetBuilder( controller.currentEmail, - currentMailbox: controller.mailboxDashBoardController.searchController.isSearchEmailRunning - ? controller.currentEmail?.findMailboxContain(controller.mailboxDashBoardController.mapMailbox) - : controller.currentMailbox, + currentMailbox: controller.currentEmail != null + ? controller.getMailboxContain(controller.currentEmail!) + : null, isSearchIsRunning: controller.mailboxDashBoardController.searchController.isSearchEmailRunning, onBackActionClick: () => controller.closeEmailView(context), onEmailActionClick: (email, action) => @@ -600,12 +600,14 @@ class EmailView extends GetWidget with NetworkConnectionMixin { } Widget _markAsEmailSpamOrUnSpamAction(BuildContext context, PresentationEmail email) { + final currentMailbox = controller.getMailboxContain(email); + return (EmailActionCupertinoActionSheetActionBuilder( const Key('mark_as_spam_or_un_spam_action'), SvgPicture.asset( - controller.currentMailbox?.isSpam == true ? imagePaths.icNotSpam : imagePaths.icSpam, + currentMailbox?.isSpam == true ? imagePaths.icNotSpam : imagePaths.icSpam, width: 28, height: 28, fit: BoxFit.fill, color: AppColor.colorTextButton), - controller.currentMailbox?.isSpam == true + currentMailbox?.isSpam == true ? AppLocalizations.of(context).remove_from_spam : AppLocalizations.of(context).mark_as_spam, email, @@ -616,7 +618,7 @@ class EmailView extends GetWidget with NetworkConnectionMixin { ? const EdgeInsets.only(right: 12) : EdgeInsets.zero) ..onActionClick((email) => controller.handleEmailAction(context, email, - controller.currentMailbox?.isSpam == true ? EmailActionType.unSpam : EmailActionType.moveToSpam))) + currentMailbox?.isSpam == true ? EmailActionType.unSpam : EmailActionType.moveToSpam))) .build(); }