From 99d2707c553ef4f08fe01e1ecf85d4dce365eead Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 6 Oct 2021 09:58:43 +0700 Subject: [PATCH] TF-105 Integrate HtmlContentViewer into EmailView --- .../email/presentation/email_view.dart | 36 +++++------ .../widgets/message_content_tile_builder.dart | 63 ------------------- 2 files changed, 15 insertions(+), 84 deletions(-) delete mode 100644 lib/features/email/presentation/widgets/message_content_tile_builder.dart diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index 6a1ec5368..24834f763 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -7,12 +7,12 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/email/presentation/email_controller.dart'; +import 'package:tmail_ui_user/features/email/presentation/model/text_format.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/app_bar_mail_widget_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_file_tile_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/bottom_bar_mail_widget_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/extensions/email_content_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/extensions/list_attachment_extension.dart'; -import 'package:tmail_ui_user/features/email/presentation/widgets/message_content_tile_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/sender_and_receiver_information_tile_builder.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:filesize/filesize.dart'; @@ -121,7 +121,7 @@ class EmailView extends GetView { (failure) => SizedBox.shrink(), (success) => success is LoadingState ? Center(child: Padding( - padding: EdgeInsets.only(top: 25, bottom: 16), + padding: EdgeInsets.only(top: 16, bottom: 16), child: SizedBox( width: 30, height: 30, @@ -131,7 +131,7 @@ class EmailView extends GetView { Widget _buildEmailMessage(BuildContext context) { return Container( - padding: EdgeInsets.only(left: 12, right: 12, top: 16, bottom: 24), + padding: EdgeInsets.only(left: 12, right: 12, top: 16, bottom: 16), alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), @@ -281,25 +281,19 @@ class EmailView extends GetView { Widget _buildListMessageContent() { return Obx(() { - if (emailController.emailContent.value != null) { - final messageContents = emailController.emailContent.value!.getListMessageContent(); - final attachmentsInline = emailController.emailContent.value!.getListAttachmentInline(); - return messageContents.isNotEmpty - ? ListView.builder( - primary: false, - shrinkWrap: true, + final messageContents = emailController.emailContent.value?.getListMessageContent(); + + if (messageContents != null && messageContents.isNotEmpty) { + return messageContents.first.textFormat == TextFormat.PLAIN + ? Padding( padding: EdgeInsets.only(top: 16), - key: Key('list_message_content'), - itemCount: messageContents.length, - itemBuilder: (context, index) => - MessageContentTileBuilder( - htmlMessagePurifier: htmlMessagePurifier, - messageContent: messageContents[index], - attachmentInlines: attachmentsInline, - session: emailController.mailboxDashBoardController.sessionCurrent, - accountId: emailController.mailboxDashBoardController.accountId.value) - .build()) - : SizedBox.shrink(); + child: Text( + '${messageContents.first.content}', + style: TextStyle(fontSize: 12, + color: AppColor.mailboxTextColor))) + : HtmlContentViewer( + message: messageContents.first.content, + ); } else { return SizedBox.shrink(); } diff --git a/lib/features/email/presentation/widgets/message_content_tile_builder.dart b/lib/features/email/presentation/widgets/message_content_tile_builder.dart deleted file mode 100644 index e7d9d9f2a..000000000 --- a/lib/features/email/presentation/widgets/message_content_tile_builder.dart +++ /dev/null @@ -1,63 +0,0 @@ - -import 'package:core/core.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; -import 'package:jmap_dart_client/jmap/account_id.dart'; -import 'package:jmap_dart_client/jmap/core/session/session.dart'; -import 'package:model/model.dart'; -import 'package:tmail_ui_user/features/email/presentation/model/message_content.dart'; -import 'package:tmail_ui_user/features/email/presentation/model/text_format.dart'; - -class MessageContentTileBuilder { - - final MessageContent messageContent; - final List attachmentInlines; - final Session? session; - final AccountId? accountId; - final HtmlMessagePurifier htmlMessagePurifier; - - MessageContentTileBuilder({ - required this.htmlMessagePurifier, - required this.messageContent, - required this.attachmentInlines, - required this.session, - required this.accountId, - }); - - Widget build() { - return Theme( - data: ThemeData( - splashColor: Colors.transparent, - highlightColor: Colors.transparent), - child: MediaQuery( - data: MediaQueryData(padding: EdgeInsets.zero), - child: Center( - child: messageContent.textFormat == TextFormat.PLAIN - ? Text('${messageContent.content}', style: TextStyle(fontSize: 12, color: AppColor.mailboxTextColor)) - : HtmlWidget( - getHtmlMessageText(), - textStyle: TextStyle(fontSize: 12, color: AppColor.mailboxTextColor), - buildAsync: true, - buildAsyncBuilder: (_, snapshot) => snapshot.data ?? SizedBox( - height: 30, - width: 30, - child: CircularProgressIndicator(color: AppColor.primaryColor)), - webViewJs: false), - ) - ) - ); - } - - String getHtmlMessageText() { - final message = (attachmentInlines.isNotEmpty && session != null && accountId != null && messageContent.hasImageInlineWithCid()) - ? '${messageContent.getContentHasInlineAttachment(session!.getDownloadUrl(), accountId!, attachmentInlines)}' - : '${messageContent.content}'; - - final trustAsHtml = htmlMessagePurifier.purifyHtmlMessage( - message, - allowAttributes: {'style', 'input', 'form'}); - - return trustAsHtml; - } -} \ No newline at end of file