TF-255 Create EasyWebView for display content email

This commit is contained in:
dab246
2022-02-15 15:19:48 +07:00
committed by Dat H. Pham
parent 8474ede9c3
commit bf860ee4d0
2 changed files with 34 additions and 12 deletions
@@ -1,4 +1,5 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:easy_web_view/easy_web_view.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -10,6 +11,7 @@ class HtmlContentViewer extends StatefulWidget {
final String contentHtml; final String contentHtml;
final int minHeight; final int minHeight;
final double widthContent; final double widthContent;
final double? heightContent;
final Widget? loadingWidget; final Widget? loadingWidget;
/// Register this callback if you want a reference to the [InAppWebViewController]. /// Register this callback if you want a reference to the [InAppWebViewController].
@@ -26,6 +28,7 @@ class HtmlContentViewer extends StatefulWidget {
Key? key, Key? key,
required this.contentHtml, required this.contentHtml,
required this.widthContent, required this.widthContent,
this.heightContent,
this.minHeight = 100, this.minHeight = 100,
this.loadingWidget, this.loadingWidget,
this.onCreated, this.onCreated,
@@ -99,18 +102,22 @@ class _HtmlContentViewState extends State<HtmlContentViewer> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_documentWidth = widget.widthContent; if (kIsWeb) {
return Stack( return _buildWebViewOnBrowser();
alignment: AlignmentDirectional.center, } else {
children: [ _documentWidth = widget.widthContent;
SizedBox( return Stack(
height: _documentHeight, alignment: AlignmentDirectional.center,
width: _documentWidth, children: [
child: _buildWebView(), SizedBox(
), height: _documentHeight,
if (loading) _buildLoadingView() width: _documentWidth,
], child: _buildWebView(),
); ),
if (loading) _buildLoadingView()
],
);
}
} }
Widget _buildLoadingView() { Widget _buildLoadingView() {
@@ -126,6 +133,20 @@ class _HtmlContentViewState extends State<HtmlContentViewer> {
} }
} }
Widget _buildWebViewOnBrowser() {
if (_initialPageContent == null || _initialPageContent?.isEmpty == true) {
return Container();
}
return EasyWebView(
key: ValueKey('WebViewOnBrowser'),
src: _initialPageContent!,
onLoaded: () => {},
isHtml: true,
webNavigationDelegate: (_) => WebNavigationDecision.prevent,
height: widget.heightContent,
);
}
Widget _buildWebView() { Widget _buildWebView() {
if (_initialPageContent == null || _initialPageContent?.isEmpty == true) { if (_initialPageContent == null || _initialPageContent?.isEmpty == true) {
return Container(); return Container();
@@ -34,6 +34,7 @@ class EmailContentItemBuilder {
case EmailContentType.textHtml: case EmailContentType.textHtml:
return HtmlContentViewer( return HtmlContentViewer(
widthContent: MediaQuery.of(_context).size.width, widthContent: MediaQuery.of(_context).size.width,
heightContent: MediaQuery.of(_context).size.height,
contentHtml: _emailContent.content, contentHtml: _emailContent.content,
loadingWidget: loadingWidget, loadingWidget: loadingWidget,
mailtoDelegate: (uri) async {}); mailtoDelegate: (uri) async {});