TF-3715 Thread Detail Fix concurrent modification during iteration

This commit is contained in:
DatDang
2025-06-03 09:36:39 +07:00
committed by Dat H. Pham
parent 9fca7acbba
commit e61ee911de
3 changed files with 8 additions and 16 deletions
@@ -1,6 +1,5 @@
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; 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/email_action_type.dart';
import 'package:model/email/presentation_email.dart'; import 'package:model/email/presentation_email.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.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 RefreshAllEmailAction extends EmailUIAction {}
class CloseEmailInThreadDetailAction extends EmailUIAction { class CloseEmailInThreadDetailAction extends EmailUIAction {}
final EmailId emailId;
CloseEmailInThreadDetailAction(this.emailId);
@override
List<Object?> get props => [emailId];
}
class PerformEmailActionInThreadDetailAction extends EmailUIAction { class PerformEmailActionInThreadDetailAction extends EmailUIAction {
PerformEmailActionInThreadDetailAction({ PerformEmailActionInThreadDetailAction({
required this.emailActionType, required this.emailActionType,
@@ -399,12 +399,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
action.presentationEmail, action.presentationEmail,
); );
} else if (action is CloseEmailInThreadDetailAction) { } else if (action is CloseEmailInThreadDetailAction) {
if (action.emailId != _currentEmailId) return; if (_currentEmailId == null) return;
closeEmailView(context: currentContext); closeEmailView(context: currentContext);
for (var worker in obxListeners) { for (var worker in obxListeners) {
worker.dispose(); worker.dispose();
} }
Get.delete<SingleEmailController>(tag: _currentEmailId?.id.value); Get.delete<SingleEmailController>(tag: _currentEmailId!.id.value);
} }
})); }));
@@ -10,12 +10,11 @@ extension CloseThreadDetailAction on ThreadDetailController {
} else { } else {
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread); mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
} }
final cleanUpEmailIds = List.from(emailIdsPresentation.keys); mailboxDashBoardController
for (var emailId in cleanUpEmailIds) { .dispatchEmailUIAction(CloseEmailInThreadDetailAction());
mailboxDashBoardController Future.delayed(Duration.zero, () {
..dispatchEmailUIAction(CloseEmailInThreadDetailAction(emailId)) mailboxDashBoardController.dispatchEmailUIAction(EmailUIAction());
..dispatchEmailUIAction(EmailUIAction()); });
}
reset(); reset();
} }