From e61ee911de56864d334f61071ad537e084f10e21 Mon Sep 17 00:00:00 2001 From: DatDang Date: Tue, 3 Jun 2025 09:36:39 +0700 Subject: [PATCH] TF-3715 Thread Detail Fix concurrent modification during iteration --- .../email/presentation/action/email_ui_action.dart | 9 +-------- .../controller/single_email_controller.dart | 4 ++-- .../extension/close_thread_detail_action.dart | 11 +++++------ 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/lib/features/email/presentation/action/email_ui_action.dart b/lib/features/email/presentation/action/email_ui_action.dart index 4aee77e06..79e4a0916 100644 --- a/lib/features/email/presentation/action/email_ui_action.dart +++ b/lib/features/email/presentation/action/email_ui_action.dart @@ -1,6 +1,5 @@ import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; -import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; import 'package:tmail_ui_user/features/base/action/ui_action.dart'; @@ -33,14 +32,8 @@ class ShowEmailContentViewAction extends EmailUIAction {} class RefreshAllEmailAction extends EmailUIAction {} -class CloseEmailInThreadDetailAction extends EmailUIAction { - final EmailId emailId; +class CloseEmailInThreadDetailAction extends EmailUIAction {} - CloseEmailInThreadDetailAction(this.emailId); - - @override - List get props => [emailId]; -} class PerformEmailActionInThreadDetailAction extends EmailUIAction { PerformEmailActionInThreadDetailAction({ required this.emailActionType, diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index d6865232c..0d92fe4da 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -399,12 +399,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin { action.presentationEmail, ); } else if (action is CloseEmailInThreadDetailAction) { - if (action.emailId != _currentEmailId) return; + if (_currentEmailId == null) return; closeEmailView(context: currentContext); for (var worker in obxListeners) { worker.dispose(); } - Get.delete(tag: _currentEmailId?.id.value); + Get.delete(tag: _currentEmailId!.id.value); } })); diff --git a/lib/features/thread_detail/presentation/extension/close_thread_detail_action.dart b/lib/features/thread_detail/presentation/extension/close_thread_detail_action.dart index 49949ee33..3c7e0ca4f 100644 --- a/lib/features/thread_detail/presentation/extension/close_thread_detail_action.dart +++ b/lib/features/thread_detail/presentation/extension/close_thread_detail_action.dart @@ -10,12 +10,11 @@ extension CloseThreadDetailAction on ThreadDetailController { } else { mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread); } - final cleanUpEmailIds = List.from(emailIdsPresentation.keys); - for (var emailId in cleanUpEmailIds) { - mailboxDashBoardController - ..dispatchEmailUIAction(CloseEmailInThreadDetailAction(emailId)) - ..dispatchEmailUIAction(EmailUIAction()); - } + mailboxDashBoardController + .dispatchEmailUIAction(CloseEmailInThreadDetailAction()); + Future.delayed(Duration.zero, () { + mailboxDashBoardController.dispatchEmailUIAction(EmailUIAction()); + }); reset(); }