diff --git a/core/lib/presentation/utils/html_transformer/html_template.dart b/core/lib/presentation/utils/html_transformer/html_template.dart
index 5b2d5bc1e..ebeeea56e 100644
--- a/core/lib/presentation/utils/html_transformer/html_template.dart
+++ b/core/lib/presentation/utils/html_transformer/html_template.dart
@@ -1,4 +1,6 @@
+import 'package:flutter/material.dart';
+
const nameClassToolTip = 'tmail-tooltip';
const tooltipLinkCss = '''
@@ -27,6 +29,7 @@ String generateHtml(String content, {
String? styleCSS,
String? javaScripts,
bool hideScrollBar = true,
+ TextDirection? direction
}) {
return '''
@@ -53,7 +56,7 @@ String generateHtml(String content, {
${javaScripts ?? ''}
-
+
$content
diff --git a/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart b/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
index bcb8bde70..7c8202df2 100644
--- a/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
+++ b/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
@@ -16,6 +16,7 @@ class HtmlContentViewerOnWeb extends StatefulWidget {
final double widthContent;
final double heightContent;
final HtmlViewerControllerForWeb controller;
+ final TextDirection? direction;
/// Handler for mailto: links
final Function(Uri?)? mailtoDelegate;
@@ -31,6 +32,7 @@ class HtmlContentViewerOnWeb extends StatefulWidget {
required this.controller,
this.allowResizeToDocumentSize = true,
this.mailtoDelegate,
+ this.direction,
}) : super(key: key);
@override
@@ -65,7 +67,9 @@ class _HtmlContentViewerOnWebState extends State {
@override
void didUpdateWidget(covariant HtmlContentViewerOnWeb oldWidget) {
super.didUpdateWidget(oldWidget);
- if (widget.contentHtml != oldWidget.contentHtml) {
+ log('_HtmlContentViewerOnWebState::didUpdateWidget():Old-Direction: ${oldWidget.direction} | Current-Direction: ${widget.direction}');
+ if (widget.contentHtml != oldWidget.contentHtml ||
+ widget.direction != oldWidget.direction) {
createdViewId = _getRandString(10);
widget.controller.viewId = createdViewId;
_setUpWeb();
@@ -167,7 +171,8 @@ class _HtmlContentViewerOnWebState extends State {
minHeight: minHeight,
minWidth: minWidth,
styleCSS: tooltipLinkCss,
- javaScripts: webViewActionScripts + scriptsDisableZoom);
+ javaScripts: webViewActionScripts + scriptsDisableZoom,
+ direction: widget.direction);
return htmlTemplate;
}
@@ -276,21 +281,18 @@ class _HtmlContentViewerOnWebState extends State {
return Container();
}
- return Directionality(
- textDirection: TextDirection.ltr,
- child: FutureBuilder(
- future: webInit,
- builder: (context, snapshot) {
- if (snapshot.hasData) {
- return HtmlElementView(
- key: ValueKey(htmlData),
- viewType: createdViewId,
- );
- } else {
- return Container();
- }
+ return FutureBuilder(
+ future: webInit,
+ builder: (context, snapshot) {
+ if (snapshot.hasData) {
+ return HtmlElementView(
+ key: ValueKey(htmlData),
+ viewType: createdViewId,
+ );
+ } else {
+ return Container();
}
- )
+ }
);
}
}
\ No newline at end of file
diff --git a/core/lib/presentation/views/html_viewer/html_content_viewer_widget.dart b/core/lib/presentation/views/html_viewer/html_content_viewer_widget.dart
index 15e07e8f9..509a859a3 100644
--- a/core/lib/presentation/views/html_viewer/html_content_viewer_widget.dart
+++ b/core/lib/presentation/views/html_viewer/html_content_viewer_widget.dart
@@ -22,6 +22,7 @@ class HtmlContentViewer extends StatefulWidget {
final double heightContent;
final OnScrollHorizontalEnd? onScrollHorizontalEnd;
final OnWebViewLoaded? onWebViewLoaded;
+ final TextDirection? direction;
/// Register this callback if you want a reference to the [InAppWebViewController].
final void Function(InAppWebViewController controller)? onCreated;
@@ -43,6 +44,7 @@ class HtmlContentViewer extends StatefulWidget {
this.onScrollHorizontalEnd,
this.urlLauncherDelegate,
this.mailtoDelegate,
+ this.direction,
}) : super(key: key);
@override
@@ -63,14 +65,19 @@ class _HtmlContentViewState extends State {
void initState() {
super.initState();
actualHeight = widget.heightContent;
- _htmlData = generateHtml(widget.contentHtml);
+ _htmlData = generateHtml(widget.contentHtml, direction: widget.direction);
}
@override
void didUpdateWidget(covariant HtmlContentViewer oldWidget) {
super.didUpdateWidget(oldWidget);
- if (widget.contentHtml != oldWidget.contentHtml) {
- _htmlData = generateHtml(widget.contentHtml);
+ log('_HtmlContentViewState::didUpdateWidget():Old-Direction: ${oldWidget.direction} | Current-Direction: ${widget.direction}');
+ if (widget.contentHtml != oldWidget.contentHtml ||
+ widget.direction != oldWidget.direction) {
+ _htmlData = generateHtml(
+ widget.contentHtml,
+ direction: widget.direction
+ );
}
}
diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart
index 3118abc0e..49d40c857 100644
--- a/lib/features/email/presentation/email_view.dart
+++ b/lib/features/email/presentation/email_view.dart
@@ -447,11 +447,13 @@ class EmailView extends GetWidget {
if (BuildUtils.isWeb) {
return HtmlContentViewerOnWeb(
- widthContent: constraints.maxWidth,
- heightContent: responsiveUtils.getSizeScreenHeight(context),
- contentHtml: allEmailContents ?? "",
- controller: HtmlViewerControllerForWeb(),
- mailtoDelegate: (uri) => controller.openMailToLink(uri));
+ widthContent: constraints.maxWidth,
+ heightContent: responsiveUtils.getSizeScreenHeight(context),
+ contentHtml: allEmailContents ?? "",
+ controller: HtmlViewerControllerForWeb(),
+ mailtoDelegate: (uri) => controller.openMailToLink(uri),
+ direction: AppUtils.getCurrentDirection(context),
+ );
} else {
return HtmlContentViewer(
heightContent: responsiveUtils.getSizeScreenHeight(context),
@@ -462,6 +464,7 @@ class EmailView extends GetWidget {
log('EmailView::_buildEmailContent(): isScrollPageViewActivated: $isScrollPageViewActivated');
controller.emailSupervisorController.updateScrollPhysicPageView(isScrollPageViewActivated: isScrollPageViewActivated);
},
+ direction: AppUtils.getCurrentDirection(context),
);
}
} else {
diff --git a/lib/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart b/lib/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart
index 8f7a275ce..20f932903 100644
--- a/lib/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart
+++ b/lib/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart
@@ -3,6 +3,7 @@ import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.d
import 'package:core/presentation/views/html_viewer/html_viewer_controller_for_web.dart';
import 'package:core/utils/build_utils.dart';
import 'package:flutter/material.dart';
+import 'package:tmail_ui_user/main/utils/app_utils.dart';
class SignatureBuilder extends StatelessWidget {
@@ -27,13 +28,13 @@ class SignatureBuilder extends StatelessWidget {
width: signatureWidth,
color: Colors.white,
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 16.0),
- child: _buildSignature(signatureWidth, signatureHeight),
+ child: _buildSignature(context, signatureWidth, signatureHeight),
);
}
);
}
- Widget _buildSignature(double width, double height) {
+ Widget _buildSignature(BuildContext context, double width, double height) {
if (signatureSelected.isNotEmpty) {
if (BuildUtils.isWeb) {
return HtmlContentViewerOnWeb(
@@ -41,12 +42,14 @@ class SignatureBuilder extends StatelessWidget {
widthContent: width,
heightContent: height,
controller: HtmlViewerControllerForWeb(),
- allowResizeToDocumentSize: false
+ allowResizeToDocumentSize: false,
+ direction: AppUtils.getCurrentDirection(context),
);
} else {
return HtmlContentViewer(
contentHtml: signatureSelected,
- heightContent: height
+ heightContent: height,
+ direction: AppUtils.getCurrentDirection(context),
);
}
} else {
diff --git a/lib/main/utils/app_utils.dart b/lib/main/utils/app_utils.dart
index 6f7a7d592..f554a1718 100644
--- a/lib/main/utils/app_utils.dart
+++ b/lib/main/utils/app_utils.dart
@@ -33,6 +33,9 @@ class AppUtils {
return intl.Bidi.isRtlLanguage(Localizations.localeOf(context).languageCode);
}
+ static TextDirection getCurrentDirection(BuildContext context) =>
+ isDirectionRTL(context) ? TextDirection.rtl : TextDirection.ltr;
+
static bool isEmailLocalhost(String email) {
return RegExp(r'^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@localhost$').hasMatch(email);
}