flutter_widget_from_html_core

Creator: coderz1093

Last updated:

Add to Cart

Description:

flutter widget from html core

Flutter Widget from HTML (core) #



Flutter package to render html as widgets that focuses on correctness and extensibility.
Supports 70+ most popular tags.



Live demo










Getting Started #
Add this to your app's pubspec.yaml file:
dependencies:
flutter_widget_from_html_core: ^0.15.2
copied to clipboard
Usage #
Then you have to import the package with:
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
copied to clipboard
And use HtmlWidget where appropriate:
HtmlWidget(
// the first parameter (`html`) is required
'''
<h3>Heading</h3>
<p>
A paragraph with <strong>strong</strong>, <em>emphasized</em>
and <span style="color: red">colored</span> text.
</p>
''',

// all other parameters are optional, a few notable params:

// specify custom styling for an element
// see supported inline styling below
customStylesBuilder: (element) {
if (element.classes.contains('foo')) {
return {'color': 'red'};
}

return null;
},

customWidgetBuilder: (element) {
if (element.attributes['foo'] == 'bar') {
// render a custom widget that takes the full width
return FooBarWidget();
}

if (element.attributes['fizz'] == 'buzz') {
// render a custom widget that inlines with surrounding text
return InlineCustomWidget(
child: FizzBuzzWidget(),
)
}

return null;
},

// this callback will be triggered when user taps a link
onTapUrl: (url) => print('tapped $url'),

// select the render mode for HTML body
// by default, a simple `Column` is rendered
// consider using `ListView` or `SliverList` for better performance
renderMode: RenderMode.column,

// set the default styling for text
textStyle: TextStyle(fontSize: 14),
),
copied to clipboard
Features #
HTML tags #
Below tags are the ones that have special meaning / styling, all other tags will be parsed as text.
Compare between Flutter rendering and browser's.

A: underline, theme accent color with scroll to anchor support
H1/H2/H3/H4/H5/H6
IMG with support for asset (asset://), data uri, local file (file://) and network image
LI/OL/UL with support for:

Attributes: type, start, reversed
Inline style list-style-type values: lower-alpha, upper-alpha, lower-latin, upper-latin, circle, decimal, disc, lower-roman, upper-roman, square


TABLE/CAPTION/THEAD/TBODY/TFOOT/TR/TD/TH with support for:

TABLE attributes border, cellpadding, cellspacing
TD/TH attributes colspan, rowspan, valign
Table is scrollable if columns are too wide


ABBR, ACRONYM, ADDRESS, ARTICLE, ASIDE, B, BIG, BLOCKQUOTE, BR, CENTER, CITE, CODE,
DD, DEL, DETAILS, DFN, DIV, DL, DT, EM, FIGCAPTION, FIGURE, FONT, FOOTER, HEADER, HR, I, INS,
KBD, MAIN, MARK, NAV, NOSCRIPT, P, PRE, Q, RP, RT, RUBY, S, SAMP, SECTION, SMALL,
STRIKE, STRONG, STYLE, SUB, SUMMARY, SUP, TT, U, VAR
Everything with screenshot: https://demo.fwfh.dev/supported/tags.html
Try with fwfh.dev

These tags requires flutter_widget_from_html:

AUDIO
IFRAME
SVG
VIDEO

These tags and their contents will be ignored:

SCRIPT
STYLE

Attributes #

align: center/end/justify/left/right/start/-moz-center/-webkit-center
dir: auto/ltr/rtl

Inline stylings #

background: 1 value (color)

background-color: currentcolor, hex values, rgb(), hsl() or named colors
background-image: url() with support for asset (asset://), data uri, local file (file://) and network image
background-repeat: no-repeat/repeat/repeat-x/repeat-y
background-position: single or double instances of bottom/center/left/right/top (e.g. top left)
background-size: auto/contain/cover


border: 3 values (width style color), 2 values (width style) or 1 value (width)

border-top, border-right, border-bottom, border-left
border-block-start, border-block-end
border-inline-start, border-inline-end


border-radius: 4, 3, 2 or 1 value with slash support (e.g. 10px / 20px)

border-top-left-radius: 2 values or 1 value in em, pt and px
border-top-right-radius: 2 values or 1 value in em, pt and px
border-bottom-right-radius: 2 values or 1 value in em, pt and px
border-bottom-left-radius: 2 values or 1 value in em, pt and px


color: hex values, rgb(), hsl() or named colors
direction (similar to dir attribute)
display: block/flex/inline/inline-block/none

In flex mode:

flex-direction: column/row
align-items: flex-start/flex-end/center/baseline/stretch
justify-content: flex-start/flex-end/center/space-between/space-around/space-evenly




font-family
font-size: absolute (e.g. xx-large), relative (larger, smaller) or values in em, %, pt and px
font-style: italic/normal
font-weight: bold/normal/100..900
line-height: normal, number or values in em, %, pt and px
margin: 4 values, 2 values or 1 value in em, pt and px

margin-top, margin-right, margin-bottom, margin-left
margin-block-start, margin-block-end
margin-inline-start, margin-inline-end


padding: 4 values, 2 values or 1 value in em, pt and px

padding-top, padding-right, padding-bottom, padding-left
padding-block-start, padding-block-end
padding-inline-start, padding-inline-end


vertical-align: baseline/top/bottom/middle/sub/super
text-align (similar to align attribute)
text-decoration

text-decoration-color: currentcolor, hex values, rgb(), hsl() or named colors
text-decoration-line: line-through/none/overline/underline
text-decoration-style: dotted/dashed/double/solid
text-decoration-thickness, text-decoration-width: values in % only


text-overflow: clip/ellipsis. Note: text-overflow: ellipsis should be used in conjuntion with max-lines or -webkit-line-clamp for better result.
text-shadow:

4 values (color x y blur, color x y blur)
3 values (x y color, color x y)
Or 2 values (x y)
Multiple shadows


white-space: pre/normal/nowrap
Sizing: auto or values in em, %, pt and px

width, max-width, min-width
height, max-height, min-height



Extensibility #
This package implements widget building logic with high testing coverage to ensure correctness. It tries to render an optimal tree by using RichText with specific TextStyle, collapsing margins, proper whitespace handling, etc. The idea is to build a solid foundation for apps to customize.
The enhanced package uses a custom WidgetFactory with pre-built mixins for easy usage:

fwfh_cached_network_image for optimized image rendering
fwfh_chewie for VIDEO support
fwfh_just_audio for AUDIO support
fwfh_svg for SVG support
fwfh_url_launcher to launch URLs
fwfh_webview for IFRAME support

See the extensibility document for detailed information.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.