Sub6Resources / flutter_html

A Flutter widget for rendering static html as Flutter widgets (Will render over 80 different html tags!)
https://pub.dev/packages/flutter_html
MIT License
1.75k stars 805 forks source link

[BUG] <a> links and <u> underlined texts do not set the correct colors when nested #1414

Open orevial opened 2 months ago

orevial commented 2 months ago

There are actually two problems :

1. Short links: Link color is missing

When having short <a> links nested in <u> underlined text, the underlining color for the link is the color of the <u> underlining element, where it is expected to be the color of the <a>, as it is the inner child.

E.g.:

Html(
  data: '''<u>When a text that contains <a href="https://google.com">a single line link</a> is underlined, the link underline color is wrong</u>''',
  style: {
    "u": Style(color: Colors.black),
    "a": Style(color: Colors.red),
  },
);

Renders as follows:

Capture d’écran 2024-02-27 à 12 42 29

2. Long links: Link color is used for text after the text

When having <a> links that span multiple lines nested in <u> underlined text, the link is now actually using its defined color as expected, but this time the underlining color for the text after the link is the color of the link rather than the <u> underlining color. E.g.:

Html(
  data: '''<u>When a text that contains <a href="https://google.com">a link somewhat that spans multiple lines</a> is underlined, the end underline color is wrong</u>''',
  style: {
    "u": Style(color: Colors.black),
    "a": Style(color: Colors.red),
  },
);

Renders as follows:

Capture d’écran 2024-02-27 à 12 38 32

RayChow19 commented 2 months ago

to solve the problem for your example: "u":Style( textDecorationColor: Colors.red, ),

orevial commented 2 months ago

to solve the problem for your example: "u":Style( textDecorationColor: Colors.red, ),

This does not solve the problem, it is a workaround that does not fix the bug and does not fit most usecases : having an underline color that's different for standard texts and links. Take web for example : 99% of websites use a black/dark grey color for texts (even when underlined) whereas links are usually blue...