TF-1512 Only use HtmlViewer to display signatures (for both html/text or plain/text formats)

This commit is contained in:
dab246
2023-03-01 16:02:15 +07:00
committed by Dat Vu
parent b593c8a823
commit 3f522445a9
4 changed files with 40 additions and 45 deletions
@@ -0,0 +1,15 @@
import 'package:jmap_dart_client/jmap/identities/identity.dart';
extension IdentityExtension on Identity {
String get signatureAsString {
if (htmlSignature?.value.isNotEmpty == true) {
return htmlSignature!.value;
} else if (textSignature?.value.isNotEmpty == true) {
return textSignature!.value;
} else {
return '';
}
}
}
@@ -6,7 +6,7 @@ import 'package:flutter/material.dart';
import 'package:get/get_state_manager/get_state_manager.dart'; import 'package:get/get_state_manager/get_state_manager.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identities_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identities_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/identity_list_tile_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/identity_list_tile_builder.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/signature_of_identity_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart';
class IdentitiesRadioListBuilder extends StatelessWidget { class IdentitiesRadioListBuilder extends StatelessWidget {
@@ -46,7 +46,7 @@ class IdentitiesRadioListBuilder extends StatelessWidget {
...[ ...[
_buildListIdentityView(context), _buildListIdentityView(context),
Container(height: 1, color: AppColor.attachmentFileBorderColor), Container(height: 1, color: AppColor.attachmentFileBorderColor),
Obx(() => SignatureOfIdentityBuilder(identity: controller.identitySelected.value!)) Obx(() => SignatureBuilder(identity: controller.identitySelected.value!))
] ]
else else
_buildListIdentityView(context) _buildListIdentityView(context)
@@ -63,7 +63,7 @@ class IdentitiesRadioListBuilder extends StatelessWidget {
_buildListIdentityView(context), _buildListIdentityView(context),
Container(width: 1, color: AppColor.attachmentFileBorderColor), Container(width: 1, color: AppColor.attachmentFileBorderColor),
Expanded( Expanded(
child: Obx(() => SignatureOfIdentityBuilder(identity: controller.identitySelected.value!)), child: Obx(() => SignatureBuilder(identity: controller.identitySelected.value!)),
) )
] ]
else else
@@ -1,38 +1,36 @@
import 'package:core/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart'; import 'package:core/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart';
import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart'; import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart';
import 'package:core/presentation/views/html_viewer/html_viewer_controller_for_web.dart'; import 'package:core/presentation/views/html_viewer/html_viewer_controller_for_web.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/build_utils.dart'; import 'package:core/utils/build_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:html_unescape/html_unescape_small.dart'; import 'package:html_unescape/html_unescape_small.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/identity_extension.dart';
class SignatureBuilder extends StatelessWidget { class SignatureBuilder extends StatelessWidget {
const SignatureBuilder({ const SignatureBuilder({
Key? key, Key? key,
required this.identity,
this.width, this.width,
this.height, this.height = 256
this.htmlSignature,
this.textSignature,
}) : super(key: key); }) : super(key: key);
final Signature? htmlSignature; final Identity identity;
final Signature? textSignature;
final double? width; final double? width;
final double? height; final double height;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return LayoutBuilder( return LayoutBuilder(
builder: (context, constraints) { builder: (context, constraints) {
final signatureWidth = width ?? constraints.biggest.width; final signatureWidth = width ?? constraints.biggest.width;
final signatureHeight = height ?? constraints.biggest.height; final signatureHeight = height;
return Container( return Container(
width: signatureWidth, width: signatureWidth,
color: Colors.white,
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 16.0), padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 16.0),
decoration: const BoxDecoration(
color: Colors.white,
),
child: _buildSignature(signatureWidth, signatureHeight), child: _buildSignature(signatureWidth, signatureHeight),
); );
} }
@@ -40,25 +38,27 @@ class SignatureBuilder extends StatelessWidget {
} }
Widget _buildSignature(double width, double height) { Widget _buildSignature(double width, double height) {
Widget signature; final signature = identity.signatureAsString;
if (htmlSignature != null && htmlSignature!.value.isNotEmpty) { log('SignatureBuilder::_buildSignature():signature: $signature');
final htmlSignatureDecoded = _decodeHtml(htmlSignature!.value); if (signature.isNotEmpty) {
final htmlSignatureDecoded = _decodeHtml(signature);
if (BuildUtils.isWeb) { if (BuildUtils.isWeb) {
signature = HtmlContentViewerOnWeb( return HtmlContentViewerOnWeb(
contentHtml: htmlSignatureDecoded, contentHtml: htmlSignatureDecoded,
widthContent: width, widthContent: width,
heightContent: height, heightContent: height,
controller: HtmlViewerControllerForWeb(), controller: HtmlViewerControllerForWeb(),
allowResizeToDocumentSize: false); allowResizeToDocumentSize: false
);
} else { } else {
signature = HtmlContentViewer(contentHtml: htmlSignatureDecoded, heightContent: height); return HtmlContentViewer(
contentHtml: htmlSignatureDecoded,
heightContent: height
);
} }
} else if (textSignature != null) {
signature = Text(textSignature!.value);
} else { } else {
signature = SizedBox.fromSize(size: Size(width, height)); return SizedBox(width: width, height: height);
} }
return signature;
} }
String _decodeHtml(String htmlString) { String _decodeHtml(String htmlString) {
@@ -1,20 +0,0 @@
import 'package:flutter/cupertino.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart';
class SignatureOfIdentityBuilder extends StatelessWidget {
const SignatureOfIdentityBuilder({Key? key, required this.identity}) : super(key: key);
final Identity identity;
@override
Widget build(BuildContext context) {
return SignatureBuilder(
height: 256,
htmlSignature: identity.htmlSignature,
textSignature: identity.textSignature
);
}
}