flutter_html_css_color 0.2.0
flutter_html_css_color: ^0.2.0 copied to clipboard
A flutter_html extension that corrects the CSS colours flutter_html 3.0.0 mis-reads or drops: 8-digit hex, hsl(), the space-separated syntax, hwb() and 148 named colours.
flutter_html_css_color #
A flutter_html extension that corrects the CSS
colours flutter_html 3.0.0 reads wrong. An 8-digit hex renders a different colour,
space-separated hsl() renders black, and rgb(255 0 0), hwb(), rebeccapurple and
transparent are dropped. There is no error and no warning.
Features #
| Declaration | flutter_html alone |
With this extension |
|---|---|---|
color: #ff000080 |
0xFF000080, opaque navy | 0x80FF0000 |
color: #f008 |
0x00FFF008, invisible | 0x88FF0000 |
color: rgb(255 0 0 / 0.5) |
dropped | 0x80FF0000 |
color: hsl(0 100% 50%) |
0xFF000000 | 0xFFFF0000 |
color: hsl(400, 100%, 50%) |
assertion error in debug | 0xFFFFAA00 |
color: rebeccapurple |
dropped | 0xFF663399 |
color: aliceblue |
0xFF0F08FF, a blue | 0xFFF0F8FF |
text-shadow: 1px 1px 2px transparent |
null-check error | 0x00000000 |
border: 2px solid currentColor |
0xFF000000 | the element's color |
Every number is measured against flutter_html 3.0.0 and pinned by a test. csslib 1.0.2
holds aliceblue as five hex digits.
One rewrite of the style attribute covers color, background-color, border and its
four sides, text-decoration, text-decoration-color and text-shadow, plus
border-color, the border-*-color longhands and outline for the sibling that renders
them.
Getting started #
dependencies:
flutter_html: ^3.0.0
flutter_html_css_color: ^0.2.0
Usage #
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html_css_color/flutter_html_css_color.dart';
Html(
data: '''
<div style="background-color: hsl(210 40% 96%);
color: rebeccapurple;">
A card flutter_html cannot colour
</div>
''',
extensions: const [CssColorHtmlExtension()],
);
parseCssColorValue reads one colour value without an Html widget. Pass its
currentColor argument when the value can be currentcolor.
Before you register it #
List this extension before
flutter_html_css_border_radius.
Both act at the preStyling step, where flutter_html runs every extension that matches
in registration order. That package reads border from the inline style with a colour
parser of its own, which knows six colour names and no hsl().
Html(
data: '<div style="border: 2px solid hsl(0 100% 50%); border-radius: 8px">C</div>',
extensions: const [
CssColorHtmlExtension(), // must come first
CssBorderRadiusHtmlExtension(),
],
);
Measured on that snippet against its version 0.1.1: listed first the clip's border is 0xFFFF0000, listed second 0xFF000000.
Order against
flutter_html_css_border
does not matter. It folds border-color into a border shorthand at the same step,
passing the colour token through, so either order hands flutter_html an rgba().
Measured on border-color: hsl(0 100% 50%): 0xFFFF0000 both ways. Without it those
longhands stay dropped.
Order against a TagExtension does not matter, which is measured. It builds its own
widget, which reads no Style.
flutter_html_bootstrap 0.1.1 and flutter_html_vuetify
0.1.0 need no entry for this extension: neither suppresses a colour declaration, and both
write the legacy rgba(r, g, b, a) form. Bootstrap is measured, Vuetify read from its
source.
Limitations #
lab(),lch(),oklab(),oklch(),color(),color-mix(),calc()andvar()stay dropped. This package carries no colour engine beyond sRGB.border: 2px solidwith no colour renders black. CSS asks for the element's own colour. This extension replaces a colour token and never adds one.currentColorresolves against the nearest inlinecoloron the element or an ancestor, and is left alone when there is none. Incoloritself it is always left alone.text-shadowwhose colour is a word that is not a CSS colour name still throws insideflutter_html. Only a value this package parses reaches the parser corrected.- A
<style>block and an external stylesheet are not read.flutter_html_css_stylesheetwrites those declarations into the inline style first.
The measurement table records every case.
Additional information #
Issues and merge requests go to the GitLab repository.
CI, publishing and Renovate are described in CONTRIBUTING.md.