TF-3601 Fix email view gone blank with large html content in iOS

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-03-31 03:41:49 +07:00
committed by Dat H. Pham
parent 20107b4ce5
commit d01618c32e
5 changed files with 177 additions and 58 deletions
@@ -190,6 +190,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
final attachmentsViewState = RxMap<Id, Either<Failure, Success>>();
final isEmailContentHidden = RxBool(false);
final currentEmailLoaded = Rxn<EmailLoaded>();
final isEmailContentClipped = RxBool(false);
EmailId? _currentEmailId;
Identity? _identitySelected;
@@ -750,6 +751,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
blobCalendarEvent.value = null;
emailUnsubscribe.value = null;
_identitySelected = null;
isEmailContentClipped.value = false;
if (isEmailClosing) {
emailLoadedViewState.value = Right(UIState.idle);
viewState.value = Right(UIState.idle);
@@ -2520,4 +2522,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
return '';
}
}
void onHtmlContentClippedAction(bool isClipped) {
log('SingleEmailController::onHtmlContentClippedAction:isClipped = $isClipped');
isEmailContentClipped.value = isClipped;
}
}
+61 -21
View File
@@ -390,7 +390,7 @@ class EmailView extends GetWidget<SingleEmailController> {
else if (presentationEmail.id == controller.currentEmail?.id)
Obx(() {
if (controller.emailContents.value != null) {
final allEmailContents = controller.emailContents.value ?? '';
String allEmailContents = controller.emailContents.value ?? '';
if (PlatformInfo.isWeb) {
return Expanded(
@@ -429,29 +429,68 @@ class EmailView extends GetWidget<SingleEmailController> {
}),
),
);
} else if (PlatformInfo.isIOS
&& !controller.responsiveUtils.isScreenWithShortestSide(context)) {
} else if (PlatformInfo.isIOS) {
return Obx(() {
if (controller.isEmailContentHidden.isTrue) {
if (controller.isEmailContentHidden.isTrue && !controller.responsiveUtils.isScreenWithShortestSide(context)) {
return const SizedBox.shrink();
} else {
return Padding(
padding: const EdgeInsetsDirectional.symmetric(
vertical: EmailViewStyles.mobileContentVerticalMargin,
horizontal: EmailViewStyles.mobileContentHorizontalMargin
),
child: LayoutBuilder(builder: (context, constraints) {
return HtmlContentViewer(
contentHtml: allEmailContents,
initialWidth: constraints.maxWidth,
direction: AppUtils.getCurrentDirection(context),
contentPadding: 0,
useDefaultFont: true,
onMailtoDelegateAction: controller.openMailToLink,
onScrollHorizontalEnd: controller.toggleScrollPhysicsPagerView,
onLoadWidthHtmlViewer: controller.emailSupervisorController.updateScrollPhysicPageView,
);
})
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsetsDirectional.symmetric(
vertical: EmailViewStyles.mobileContentVerticalMargin,
horizontal: EmailViewStyles.mobileContentHorizontalMargin,
),
child: LayoutBuilder(builder: (context, constraints) {
return HtmlContentViewer(
contentHtml: allEmailContents,
initialWidth: constraints.maxWidth,
direction: AppUtils.getCurrentDirection(context),
contentPadding: 0,
useDefaultFont: true,
onMailtoDelegateAction: controller.openMailToLink,
onScrollHorizontalEnd: controller.toggleScrollPhysicsPagerView,
onLoadWidthHtmlViewer: controller.emailSupervisorController.updateScrollPhysicPageView,
onHtmlContentClippedAction: controller.onHtmlContentClippedAction,
);
}),
),
Obx(() {
if (controller.isEmailContentClipped.isTrue) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(
AppLocalizations.of(context).messageClipped,
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: AppColor.steelGray400,
),
),
),
TMailButtonWidget.fromText(
text: AppLocalizations.of(context).viewEntireMessage.toUpperCase(),
textStyle: Theme.of(context).textTheme.bodyLarge?.copyWith(
color: AppColor.primaryColor,
fontSize: 14,
),
margin: const EdgeInsetsDirectional.only(
start: 8,
end: 8,
bottom: 24,
),
backgroundColor: Colors.transparent,
onTapActionCallback: () {},
),
],
);
} else {
return const SizedBox.shrink();
}
}),
],
);
}
});
@@ -471,6 +510,7 @@ class EmailView extends GetWidget<SingleEmailController> {
onMailtoDelegateAction: controller.openMailToLink,
onScrollHorizontalEnd: controller.toggleScrollPhysicsPagerView,
onLoadWidthHtmlViewer: controller.emailSupervisorController.updateScrollPhysicPageView,
onHtmlContentClippedAction: controller.onHtmlContentClippedAction,
);
})
);