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 68adc3967..9f8b143b2 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
@@ -1,3 +1,4 @@
+import 'package:core/core.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
@@ -8,6 +9,8 @@ class HtmlContentViewer extends StatefulWidget {
final String contentHtml;
final int minHeight;
+ final double widthContent;
+ final Widget? loadingWidget;
/// Register this callback if you want a reference to the [InAppWebViewController].
final void Function(InAppWebViewController controller)? onCreated;
@@ -22,7 +25,9 @@ class HtmlContentViewer extends StatefulWidget {
const HtmlContentViewer({
Key? key,
required this.contentHtml,
+ required this.widthContent,
this.minHeight = 100,
+ this.loadingWidget,
this.onCreated,
this.onLoadStart,
this.onLoadStop,
@@ -39,6 +44,7 @@ class _HtmlContentViewState extends State {
double? _documentWidth = 1.0;
String? _initialPageContent;
late InAppWebViewController _webViewController;
+ bool loading = true;
@override
void initState() {
@@ -101,15 +107,33 @@ class _HtmlContentViewState extends State {
@override
Widget build(BuildContext context) {
- final size = MediaQuery.of(context).size;
- _documentWidth = size.width - 30;
- return SizedBox(
- height: _documentHeight,
- width: _documentWidth,
- child: _buildWebView(),
+ _documentWidth = widget.widthContent;
+ return Stack(
+ alignment: AlignmentDirectional.center,
+ children: [
+ SizedBox(
+ height: _documentHeight,
+ width: _documentWidth,
+ child: _buildWebView(),
+ ),
+ if (loading) _buildLoadingView()
+ ],
);
}
+ Widget _buildLoadingView() {
+ if (widget.loadingWidget != null) {
+ return widget.loadingWidget!;
+ } else {
+ return Padding(
+ padding: EdgeInsets.all(16),
+ child: SizedBox(
+ width: 30,
+ height: 30,
+ child: CircularProgressIndicator(color: AppColor.primaryColor)));
+ }
+ }
+
Widget _buildWebView() {
if (_initialPageContent == null || _initialPageContent?.isEmpty == true) {
return Container();
@@ -148,6 +172,9 @@ class _HtmlContentViewState extends State {
_documentHeight = (scrollHeight + 30.0);
});
}
+ setState(() {
+ loading = false;
+ });
if (widget.onLoadStop != null) {
widget.onLoadStop!(controller, uri);
}
diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart
index 13d42afc2..c693b1f01 100644
--- a/lib/features/composer/presentation/composer_controller.dart
+++ b/lib/features/composer/presentation/composer_controller.dart
@@ -214,7 +214,10 @@ class ComposerController extends BaseController {
.addBlockTag('p', attribute: 'style=\"font-size:14px;font-style:italic;color:#182952;\"')
: '';
- final trustAsHtml = composerArguments.value?.emailContent?.content ?? '';
+ final trustAsHtml = composerArguments.value?.emailContents
+ ?.map((emailContent) => emailContent.content)
+ .toList()
+ .join('') ?? '';
final emailQuotedHtml = '$headerEmailQuotedAsHtml${trustAsHtml.addBlockQuoteTag()}';
diff --git a/lib/features/email/data/datasource/html_datasource.dart b/lib/features/email/data/datasource/html_datasource.dart
index 4802ebe7a..c3bafa717 100644
--- a/lib/features/email/data/datasource/html_datasource.dart
+++ b/lib/features/email/data/datasource/html_datasource.dart
@@ -2,5 +2,5 @@
import 'package:model/model.dart';
abstract class HtmlDataSource {
- Future transformToHtml(EmailContent emailContent);
+ Future transformEmailContent(EmailContent emailContent);
}
\ No newline at end of file
diff --git a/lib/features/email/data/datasource_impl/html_datasource_impl.dart b/lib/features/email/data/datasource_impl/html_datasource_impl.dart
index c8e04375b..69dca84a9 100644
--- a/lib/features/email/data/datasource_impl/html_datasource_impl.dart
+++ b/lib/features/email/data/datasource_impl/html_datasource_impl.dart
@@ -9,9 +9,9 @@ class HtmlDataSourceImpl extends HtmlDataSource {
HtmlDataSourceImpl(this._htmlAnalyzer);
@override
- Future transformToHtml(EmailContent emailContent) {
+ Future transformEmailContent(EmailContent emailContent) {
return Future.sync(() async {
- return await _htmlAnalyzer.transformToHtml(emailContent);
+ return await _htmlAnalyzer.transformEmailContent(emailContent);
}).catchError((error) {
throw error;
});
diff --git a/lib/features/email/data/local/html_analyzer.dart b/lib/features/email/data/local/html_analyzer.dart
index 46c04fb9a..2e43a4c59 100644
--- a/lib/features/email/data/local/html_analyzer.dart
+++ b/lib/features/email/data/local/html_analyzer.dart
@@ -5,13 +5,14 @@ import 'package:model/model.dart';
class HtmlAnalyzer {
- Future transformToHtml(EmailContent emailContent) async {
+ Future transformEmailContent(EmailContent emailContent) async {
switch(emailContent.type) {
case EmailContentType.textHtml:
final htmlTransform = HtmlTransform(emailContent.content);
- return htmlTransform.transformToHtml();
+ final htmlContent = htmlTransform.transformToHtml();
+ return EmailContent(emailContent.type, htmlContent);
default:
- return emailContent.content;
+ return emailContent;
}
}
}
\ No newline at end of file
diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart
index a1a4d0d3d..e27d29e0d 100644
--- a/lib/features/email/data/repository/email_repository_impl.dart
+++ b/lib/features/email/data/repository/email_repository_impl.dart
@@ -72,7 +72,11 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
- Future transformEmailContentToHtml(EmailContent emailContent) {
- return _htmlDataSource.transformToHtml(emailContent);
+ Future> transformEmailContent(List emailContents) async {
+ return await Future.wait(emailContents
+ .map((emailContent) async {
+ return await _htmlDataSource.transformEmailContent(emailContent);
+ })
+ .toList());
}
}
\ No newline at end of file
diff --git a/lib/features/email/domain/repository/email_repository.dart b/lib/features/email/domain/repository/email_repository.dart
index c56dd6db3..1f325e6af 100644
--- a/lib/features/email/domain/repository/email_repository.dart
+++ b/lib/features/email/domain/repository/email_repository.dart
@@ -35,5 +35,5 @@ abstract class EmailRepository {
MarkStarAction markStarAction
);
- Future transformEmailContentToHtml(EmailContent emailContent);
+ Future> transformEmailContent(List emailContents);
}
\ No newline at end of file
diff --git a/lib/features/email/domain/state/get_email_content_state.dart b/lib/features/email/domain/state/get_email_content_state.dart
index d27e81241..2726c39a8 100644
--- a/lib/features/email/domain/state/get_email_content_state.dart
+++ b/lib/features/email/domain/state/get_email_content_state.dart
@@ -2,13 +2,13 @@ import 'package:core/core.dart';
import 'package:model/model.dart';
class GetEmailContentSuccess extends UIState {
- final EmailContent emailContent;
+ final List emailContents;
final List attachments;
- GetEmailContentSuccess(this.emailContent, this.attachments);
+ GetEmailContentSuccess(this.emailContents, this.attachments);
@override
- List