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/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<Object?> get props => [emailId];
}
class PerformEmailActionInThreadDetailAction extends EmailUIAction {
PerformEmailActionInThreadDetailAction({
required this.emailActionType,
@@ -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<SingleEmailController>(tag: _currentEmailId?.id.value);
Get.delete<SingleEmailController>(tag: _currentEmailId!.id.value);
}
}));
@@ -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();
}