From af77caa033c278346fd375dcfef17441cf43ab71 Mon Sep 17 00:00:00 2001 From: Lucas Reiners Date: Fri, 8 Mar 2019 13:35:05 +0100 Subject: [PATCH] Added custom textstyle and edgeinsets callback --- lib/flutter_html.dart | 6 ++++++ lib/html_parser.dart | 25 +++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/flutter_html.dart b/lib/flutter_html.dart index 49399c2fd4..f1554ba09a 100644 --- a/lib/flutter_html.dart +++ b/lib/flutter_html.dart @@ -13,6 +13,8 @@ class Html extends StatelessWidget { this.onLinkTap, this.renderNewlines = false, this.customRender, + this.customEdgeInsets, + this.customTextStyle, this.blockSpacing = 14.0, this.useRichText = false, }) : super(key: key); @@ -29,6 +31,8 @@ class Html extends StatelessWidget { /// Either return a custom widget for specific node types or return null to /// fallback to the default rendering. final CustomRender customRender; + final CustomEdgeInsets customEdgeInsets; + final CustomTextStyle customTextStyle; @override Widget build(BuildContext context) { @@ -45,6 +49,8 @@ class Html extends StatelessWidget { width: width, onLinkTap: onLinkTap, renderNewlines: renderNewlines, + customEdgeInsets: customEdgeInsets, + customTextStyle: customTextStyle, html: data, ) : HtmlOldParser( diff --git a/lib/html_parser.dart b/lib/html_parser.dart index 9abe77bbc2..8365a56e19 100644 --- a/lib/html_parser.dart +++ b/lib/html_parser.dart @@ -6,6 +6,8 @@ import 'package:html/parser.dart' as parser; import 'package:html/dom.dart' as dom; typedef CustomRender = Widget Function(dom.Node node, List children); +typedef CustomTextStyle = TextStyle Function(dom.Node node, TextStyle baseStyle); +typedef CustomEdgeInsets = EdgeInsets Function(dom.Node node); typedef OnLinkTap = void Function(String url); const OFFSET_TAGS_FONT_SIZE_FACTOR = @@ -144,6 +146,8 @@ class HtmlRichTextParser extends StatelessWidget { this.onLinkTap, this.renderNewlines = false, this.html, + this.customTextStyle, + this.customEdgeInsets, }); final double indentSize = 10.0; @@ -152,6 +156,8 @@ class HtmlRichTextParser extends StatelessWidget { final onLinkTap; final bool renderNewlines; final String html; + final CustomTextStyle customTextStyle; + final CustomEdgeInsets customEdgeInsets; // style elements set a default style // for all child nodes @@ -472,6 +478,14 @@ class HtmlRichTextParser extends StatelessWidget { nextContext.blockType = 'blockquote'; break; } + + if (customTextStyle != null) { + final TextStyle customStyle = customTextStyle(node, childStyle); + if (customStyle != null) { + childStyle = customStyle; + } + } + nextContext.childStyle = childStyle; } @@ -610,6 +624,11 @@ class HtmlRichTextParser extends StatelessWidget { parseContext.parentElement = null; TextAlign textAlign = TextAlign.left; + EdgeInsets _customEdgeInsets; + if (customEdgeInsets != null) { + _customEdgeInsets = customEdgeInsets(node); + } + switch (node.localName) { case "hr": parseContext.rootWidgetList @@ -715,10 +734,8 @@ class HtmlRichTextParser extends StatelessWidget { )); } BlockText blockText = BlockText( - margin: EdgeInsets.only( - top: 8.0, - bottom: 8.0, - left: parseContext.indentLevel * indentSize), + margin: _customEdgeInsets ?? + EdgeInsets.only(top: 8.0, bottom: 8.0, left: parseContext.indentLevel * indentSize), padding: EdgeInsets.all(2.0), decoration: decoration, child: RichText(