hotfix: Email content broken when restore app from background then swipe to next/previous email on tablet
This commit is contained in:
+4
-4
@@ -7,7 +7,7 @@ import 'package:tmail_ui_user/features/thread_detail/presentation/extension/load
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_on_email_action_click.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_open_email_address_detail_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_load_more_segments.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/toggle_thread_detail_collape_expand.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/toggle_thread_detail_collapse_expand.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/widgets/thread_detail_collapsed_email.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/widgets/thread_detail_load_more_circle.dart';
|
||||
@@ -61,7 +61,7 @@ extension GetThreadDetailEmailViews on ThreadDetailController {
|
||||
openEmailAddressDetailAction(emailAddress);
|
||||
},
|
||||
onToggleThreadDetailCollapseExpand: () {
|
||||
toggleThreadDetailCollapeExpand(presentationEmail);
|
||||
toggleThreadDetailCollapseExpand(presentationEmail);
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -78,7 +78,7 @@ extension GetThreadDetailEmailViews on ThreadDetailController {
|
||||
isFirstEmailInThreadDetail: true,
|
||||
threadSubject: emailIdsPresentation.values.last?.subject,
|
||||
onToggleThreadDetailCollapseExpand: () {
|
||||
toggleThreadDetailCollapeExpand(presentationEmail);
|
||||
toggleThreadDetailCollapseExpand(presentationEmail);
|
||||
},
|
||||
scrollController: scrollController,
|
||||
),
|
||||
@@ -94,7 +94,7 @@ extension GetThreadDetailEmailViews on ThreadDetailController {
|
||||
isInsideThreadDetailView: true,
|
||||
emailId: presentationEmail.id,
|
||||
onToggleThreadDetailCollapseExpand: () {
|
||||
toggleThreadDetailCollapeExpand(presentationEmail);
|
||||
toggleThreadDetailCollapseExpand(presentationEmail);
|
||||
},
|
||||
scrollController: scrollController,
|
||||
),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/close_thread_detail_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/toggle_thread_detail_collape_expand.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/toggle_thread_detail_collapse_expand.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
@@ -26,7 +26,7 @@ extension HandleMarkMultipleEmailsReadSuccess on ThreadDetailController {
|
||||
|
||||
final expandedEmail = emailIdsPresentation[expandedEmailId];
|
||||
if (emailIds.contains(expandedEmailId) && expandedEmail != null) {
|
||||
toggleThreadDetailCollapeExpand(expandedEmail);
|
||||
toggleThreadDetailCollapseExpand(expandedEmail);
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
-22
@@ -1,34 +1,38 @@
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/list_presentation_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_manager.dart';
|
||||
|
||||
extension InitializeThreadDetailManager on ThreadDetailManager {
|
||||
void initializeThreadDetailManager(
|
||||
List<PresentationEmail> currentDisplayedEmails,
|
||||
PresentationEmail? selectedEmail,
|
||||
) {
|
||||
availableThreadIds.value = currentDisplayedEmails
|
||||
.map((presentationEmail) => presentationEmail.threadId)
|
||||
.toSet()
|
||||
.nonNulls
|
||||
.toList();
|
||||
if (availableThreadIds.isEmpty) return;
|
||||
if (PlatformInfo.isMobile) {
|
||||
final currentThreadId = selectedEmail?.threadId;
|
||||
final currentEmailId = selectedEmail?.id;
|
||||
|
||||
final selectedEmail = mailboxDashBoardController.selectedEmail.value;
|
||||
if (isThreadDetailEnabled && selectedEmail?.threadId != null) {
|
||||
final currentThreadIndex = availableThreadIds.indexOf(
|
||||
selectedEmail!.threadId!,
|
||||
);
|
||||
currentMobilePageViewIndex.value = currentThreadIndex;
|
||||
} else if (selectedEmail?.id != null) {
|
||||
final currentEmailIndex = currentDisplayedEmails
|
||||
.map((email) => email.id)
|
||||
.toList()
|
||||
.indexOf(selectedEmail?.id);
|
||||
currentMobilePageViewIndex.value = currentEmailIndex;
|
||||
if ((isThreadDetailEnabled && currentThreadId == null) ||
|
||||
(!isThreadDetailEnabled && currentEmailId == null)) {
|
||||
return;
|
||||
}
|
||||
|
||||
int currentPageIndex = 0;
|
||||
|
||||
if (isThreadDetailEnabled && currentThreadId != null) {
|
||||
final uniqueThreadIds = currentDisplayedEmails.uniqueThreadIds;
|
||||
availableThreadIds.value = uniqueThreadIds;
|
||||
currentPageIndex = uniqueThreadIds.indexOf(currentThreadId);
|
||||
} else if (currentEmailId != null) {
|
||||
currentPageIndex =
|
||||
currentDisplayedEmails.listEmailIds.indexOf(currentEmailId);
|
||||
}
|
||||
|
||||
pageController ??= PageController(initialPage: currentPageIndex);
|
||||
currentMobilePageViewIndex.value = currentPageIndex;
|
||||
} else {
|
||||
availableThreadIds.value = currentDisplayedEmails.uniqueThreadIds;
|
||||
}
|
||||
|
||||
pageController ??= PageController(
|
||||
initialPage: currentMobilePageViewIndex.value,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ extension OnThreadPageChanged on ThreadDetailController {
|
||||
PlatformInfo.isWeb && threadDetailManager.previousAvailable;
|
||||
|
||||
void onNext() {
|
||||
if (currentExpandedEmailId.value != null) {
|
||||
if (PlatformInfo.isWeb && currentExpandedEmailId.value != null) {
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(currentExpandedEmailId.value!),
|
||||
);
|
||||
@@ -29,11 +29,6 @@ extension OnThreadPageChanged on ThreadDetailController {
|
||||
}
|
||||
|
||||
void onNextMobile() {
|
||||
if (currentExpandedEmailId.value != null) {
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(currentExpandedEmailId.value!),
|
||||
);
|
||||
}
|
||||
loadThreadOnThreadChanged = isThreadDetailEnabled;
|
||||
threadDetailManager.pageController?.nextPage(
|
||||
duration: const Duration(milliseconds: 500),
|
||||
@@ -42,7 +37,7 @@ extension OnThreadPageChanged on ThreadDetailController {
|
||||
}
|
||||
|
||||
void onPrevious() {
|
||||
if (currentExpandedEmailId.value != null) {
|
||||
if (PlatformInfo.isWeb && currentExpandedEmailId.value != null) {
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(currentExpandedEmailId.value!),
|
||||
);
|
||||
@@ -52,11 +47,6 @@ extension OnThreadPageChanged on ThreadDetailController {
|
||||
}
|
||||
|
||||
void onPreviousMobile() {
|
||||
if (currentExpandedEmailId.value != null) {
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(currentExpandedEmailId.value!),
|
||||
);
|
||||
}
|
||||
loadThreadOnThreadChanged = isThreadDetailEnabled;
|
||||
threadDetailManager.pageController?.previousPage(
|
||||
duration: const Duration(milliseconds: 500),
|
||||
|
||||
+9
-5
@@ -1,3 +1,4 @@
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
@@ -50,11 +51,14 @@ extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController {
|
||||
return;
|
||||
}
|
||||
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
DisposePreviousExpandedEmailAction(
|
||||
currentExpandedEmailId.value!,
|
||||
),
|
||||
);
|
||||
if (PlatformInfo.isWeb) {
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
DisposePreviousExpandedEmailAction(
|
||||
currentExpandedEmailId.value!,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
loadThreadOnThreadChanged = isThreadDetailEnabled;
|
||||
_preloadSelectedEmail(selectedEmail);
|
||||
}
|
||||
|
||||
+13
-8
@@ -1,11 +1,12 @@
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/bindings/email_bindings.dart';
|
||||
import 'package:model/email/email_in_thread_status.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
|
||||
extension ToggleThreadDetailCollapeExpand on ThreadDetailController {
|
||||
void toggleThreadDetailCollapeExpand(PresentationEmail presentationEmail) {
|
||||
extension ToggleThreadDetailCollapseExpand on ThreadDetailController {
|
||||
void toggleThreadDetailCollapseExpand(PresentationEmail presentationEmail) {
|
||||
final emailId = presentationEmail.id;
|
||||
final expansionStatus = presentationEmail.emailInThreadStatus;
|
||||
if (emailId == null || expansionStatus == null) return;
|
||||
@@ -16,9 +17,11 @@ extension ToggleThreadDetailCollapeExpand on ThreadDetailController {
|
||||
emailIdsPresentation[emailId] = presentationEmail.copyWith(
|
||||
emailInThreadStatus: EmailInThreadStatus.collapsed,
|
||||
);
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(emailId),
|
||||
);
|
||||
if (PlatformInfo.isWeb) {
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(emailId),
|
||||
);
|
||||
}
|
||||
currentExpandedEmailId.value = null;
|
||||
threadDetailManager.currentMobilePageViewIndex.refresh();
|
||||
return;
|
||||
@@ -40,9 +43,11 @@ extension ToggleThreadDetailCollapeExpand on ThreadDetailController {
|
||||
emailIdsPresentation[key] = emailIdsPresentation[key]?.copyWith(
|
||||
emailInThreadStatus: EmailInThreadStatus.collapsed,
|
||||
);
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(key),
|
||||
);
|
||||
if (PlatformInfo.isWeb) {
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
CollapseEmailInThreadDetailAction(key),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
threadDetailManager.currentMobilePageViewIndex.refresh();
|
||||
@@ -82,7 +82,10 @@ class ThreadDetailManager extends ReloadableController {
|
||||
return;
|
||||
}
|
||||
|
||||
initializeThreadDetailManager(currentDisplayedEmails);
|
||||
initializeThreadDetailManager(
|
||||
currentDisplayedEmails,
|
||||
selectedEmail,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user