flutter_html
flutter_html copied to clipboard
[BUG] HTML tables do not render
Describe the bug:
HTML tables are not shown, instead I see text "TABLE SECTION"
HTML to reproduce the issue:
<section>
<div id="sec-zm2256-sec">
<h2 data-fingerprint="b4cb0a40" data-fingerprint-exact="e7c3d1bb”>REDACTED</h2>
<p data-fingerprint="739ccdbe" data-fingerprint-exact="e394d5ac">REDACTED</p>
<h3 data-fingerprint="2d5bd997" data-fingerprint-exact="f305843d">REDACTED</h3>
<table data-fingerprint="aeb1c0d0" data-fingerprint-exact="db2c1acc">
<colgroup>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED:</p>
<br/>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
</tbody>
</table>
<h3 data-fingerprint="628373a7" data-fingerprint-exact="339c8b39">REDACTED</h3>
<table data-fingerprint="399657ff" data-fingerprint-exact="51ef4eb2">
<colgroup>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<ul>
<li>REDACTED</li>
<li>REDACTED</li>
</ul>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
</tbody>
</table>
<h3 data-fingerprint="e28c86a1" data-fingerprint-exact="c2e57ce0">REDACTED</h3>
<table data-fingerprint="10efa886" data-fingerprint-exact="8f96c7ca">
<colgroup>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
</tbody>
</table>
<h3 data-fingerprint="d6e2f4e1" data-fingerprint-exact="cb204d9a">REDACTED</h3>
<table data-fingerprint="6a508d74" data-fingerprint-exact="b3f5f530">
<colgroup>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
</tbody>
</table>
<h3 data-fingerprint="a0f7905e" data-fingerprint-exact="6d92b9d4">REDACTED</h3>
<ul data-fingerprint="1b7c8504" data-fingerprint-exact="24bbacc6">
<li>REDACTED</li>
<li>REDACTED</li>
<li>REDACTED</li>
<li>REDACTED</li>
</ul>
</div>
</section>
Html
widget configuration:
Expected behavior:
Screenshots:
Device details and Flutter/Dart/flutter_html
versions:
Flutter 3.3.7, stable channel, flutter_html version ^3.0.0-alpha.5
Stacktrace/Logcat
Additional info:
A picture of a cute animal (not mandatory but encouraged)

You also need to add flutter_html_table. (Sorry for the short reply, I'm on my phone.)
@erickok Thank you for your reply. I have added flutter_html_table package and returning HTML like below, and seeing a lot of layout issues (RenderBox was not laid out, Intrinsics are not available, etc). Is there an example style map that has worked in the past?
Widget build(BuildContext context) {
return Html(
data: data,
style: style,
onLinkTap: onLinkTap,
tagsList: Html.tags,
customRenders: <CustomRenderMatcher, CustomRender>{
tableMatcher(): tableRender(),
}
);
Since adding the flutter_html_table package, ContainerSpan is no longer defined as well.
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html_table/flutter_html_table.dart';
...
Widget build(BuildContext context) {
return Html(
data: data,
style: style,
onLinkTap: onLinkTap,
tagsList: Html.tags,
customRenders: <CustomRenderMatcher, CustomRender>{
tableMatcher(): tableRender(),
tagMatcher('a'): CustomRender.widget(
widget: (RenderContext context, List<InlineSpan> Function() _inlineSpans) {
return GestureDetector(
onTap: onTap,
child: ContainerSpan(....) // The method 'ContainerSpan' isn't defined for...
)
}
)
}
);
Yes the examples all has working examples but your html is probably not supported. You may paste an example html here so er can check. Note that nested tables are currently unsupported.
I have the HTML that I'm trying to make work posted in the first comment here
<section>
<div id="sec-zm2256-sec">
<h2 data-fingerprint="b4cb0a40" data-fingerprint-exact="e7c3d1bb”>REDACTED</h2>
<p data-fingerprint="739ccdbe" data-fingerprint-exact="e394d5ac">REDACTED</p>
<h3 data-fingerprint="2d5bd997" data-fingerprint-exact="f305843d">REDACTED</h3>
<table data-fingerprint="aeb1c0d0" data-fingerprint-exact="db2c1acc">
<colgroup>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED:</p>
<br/>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
</tbody>
</table>
<h3 data-fingerprint="628373a7" data-fingerprint-exact="339c8b39">REDACTED</h3>
<table data-fingerprint="399657ff" data-fingerprint-exact="51ef4eb2">
<colgroup>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<ul>
<li>REDACTED</li>
<li>REDACTED</li>
</ul>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
</tbody>
</table>
<h3 data-fingerprint="e28c86a1" data-fingerprint-exact="c2e57ce0">REDACTED</h3>
<table data-fingerprint="10efa886" data-fingerprint-exact="8f96c7ca">
<colgroup>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
</tbody>
</table>
<h3 data-fingerprint="d6e2f4e1" data-fingerprint-exact="cb204d9a">REDACTED</h3>
<table data-fingerprint="6a508d74" data-fingerprint-exact="b3f5f530">
<colgroup>
<col/>
</colgroup>
<tbody>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
<tr>
<td>
<p>REDACTED</p>
<br/>
</td>
</tr>
</tbody>
</table>
<h3 data-fingerprint="a0f7905e" data-fingerprint-exact="6d92b9d4">REDACTED</h3>
<ul data-fingerprint="1b7c8504" data-fingerprint-exact="24bbacc6">
<li>REDACTED</li>
<li>REDACTED</li>
<li>REDACTED</li>
<li>REDACTED</li>
</ul>
</div>
</section>
Can confirm that tables within a Single Child Scrollview are now broken on our project with 3.0.0-alpha.6 Have tried #1191 as a workaround, but sadly this only fixes the layout issues for now, and scrolling/sizing of table content is otherwise broken.
I don't use sizing and I don't know if it's worked earlier, but scrolling works acceptably with this temporary solution at the moment
flutter_html:
git:
url: [email protected]:darkstarx/flutter_html.git
ref: master
flutter_html_table:
git:
url: [email protected]:darkstarx/flutter_html.git
path: packages/flutter_html_table
ref: master
Example of usage:
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html_table/flutter_html_table.dart';
...
final theme = Theme.of(context);
final l10n = L10n.of(context);
final htmlStyle = AppStyle.htmlStyle(theme,
textStyle: theme.textTheme.subtitle2,
custom: {
'h1': Style(fontSize: FontSize(17.0)),
'h2': Style(fontSize: FontSize(15.0)),
'tr': Style(
border: Border.all(
color: AppStyle.darkColors.textColor,
strokeAlign: StrokeAlign.center,
),
),
'td': Style(
padding: const EdgeInsets.all(4.0),
alignment: Alignment.center,
textAlign: TextAlign.center,
),
'p': Style(textAlign: TextAlign.start),
}
);
return FutureBuilder<String>(
future: _fileLoader,
builder: (context, snapshot) {
if (snapshot.hasData) {
return SingleChildScrollView(
child: Column(
children: [
const SizedBox(height: 10.0),
Html(
data: snapshot.data,
style: htmlStyle,
customRenders: { tableMatcher(): tableRender() },
onLinkTap: (link, ctx, attributes, _) => processLink(link),
),
],
),
);
} else if (snapshot.hasError) {
final details = snapshot.error is String ? '${snapshot.error}' : null;
return Center(child: Text(l10n.failedToLoadDocument(details)));
}
return const Center(child: CircularProgressIndicator());
},
);
@darkstarx It's likely that it's on our end as we're using Umbraco, which probably inserts some funky HTML. Would recommend people give your change a go in case it fixes it for you!
@mariapapag I don't know the reason but adding tags like <p>
or <ul>
inside <td>
gives an error.
If you try removing <p>
and <ul>
tags inside <td>
your table will render properly.
I came to a workaround solution where I reuse Html
widget itself forcing all html inside each table cell to be inline. I do this with a custom table render function that is copied from flutter_html_table
source code as a start point.
I also added a SingleChildScrollView
to get back the horizontal scroll and in my custom function, as it was possible in flutter_html: ^2.2.1
. And with my _renderTableCell
function i can manage the style of the content of each table cell, in my case i handle the cell width based on the screen size to get a nice horizontal scroll sizing.
As you can see I injected my code as a substitute for the CssBoxWidget.withInlineSpanChildren
function.
This is my solution tested in Flutter 3.7.9, with flutter_html: ^3.0.0-alpha.6
and flutter_html_table: ^3.0.0-alpha.4
Usage:
return Html(
shrinkWrap: true,
data: html,
style: style,
customRenders: {
// tableMatcher(): tableRender(),
tableMatcher(): customTableRender(onLinkTap: _onLinkTap),
},
onLinkTap: _onLinkTap,
);
custom_html_table.dart
library flutter_html_table;
import 'dart:math';
import 'package:flutter_layout_grid/flutter_layout_grid.dart';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:html/dom.dart' as dom;
typedef OnLinkTapCallback = void Function(
String? url,
RenderContext renderContext,
Map<String, String> attributes,
dom.Element? element,
);
/// The CustomRender function that will render the <table> HTML tag
CustomRender customTableRender({OnLinkTapCallback? onLinkTap}) =>
CustomRender.widget(widget: (context, buildChildren) {
return CssBoxWidget(
key: context.key,
style: context.style,
child: LayoutBuilder(
builder: (_, constraints) =>
_layoutCells(context, constraints, onLinkTap),
// builder: (_, constraints) => oldLayoutCells(context, constraints),
),
);
});
/// A CustomRenderMatcher for matching the <table> HTML tag
CustomRenderMatcher tableMatcher() => (context) {
return context.tree.element?.localName == "table";
};
Widget _layoutCells(
RenderContext context,
BoxConstraints constraints,
OnLinkTapCallback? onLinkTap,
) {
final rows = <TableRowLayoutElement>[];
List<TrackSize> columnSizes = <TrackSize>[];
for (var child in context.tree.children) {
if (child is TableStyleElement) {
// Map <col> tags to predetermined column track sizes
columnSizes = child.children
.where((c) => c.name == "col")
.map((c) {
final span = int.tryParse(c.attributes["span"] ?? "1") ?? 1;
final colWidth = c.attributes["width"];
return List.generate(span, (index) {
if (colWidth != null && colWidth.endsWith("%")) {
if (!constraints.hasBoundedWidth) {
// In a horizontally unbounded container; always wrap content instead of applying flex
return const IntrinsicContentTrackSize();
}
final percentageSize =
double.tryParse(colWidth.substring(0, colWidth.length - 1));
return percentageSize != null && !percentageSize.isNaN
? FlexibleTrackSize(percentageSize * 0.01)
: const IntrinsicContentTrackSize();
} else if (colWidth != null) {
final fixedPxSize = double.tryParse(colWidth);
return fixedPxSize != null
? FixedTrackSize(fixedPxSize)
: const IntrinsicContentTrackSize();
} else {
return const IntrinsicContentTrackSize();
}
});
})
.expand((element) => element)
.toList(growable: false);
} else if (child is TableSectionLayoutElement) {
rows.addAll(child.children.whereType());
} else if (child is TableRowLayoutElement) {
rows.add(child);
}
}
// All table rows have a height intrinsic to their (spanned) contents
final rowSizes =
List.generate(rows.length, (_) => const IntrinsicContentTrackSize());
// Calculate column bounds
int columnMax = 0;
List<int> rowSpanOffsets = [];
for (final row in rows) {
final cols = row.children
.whereType<TableCellElement>()
.fold(0, (int value, child) => value + child.colspan) +
rowSpanOffsets.fold<int>(0, (int offset, child) => child);
columnMax = max(cols, columnMax);
rowSpanOffsets = [
...rowSpanOffsets.map((value) => value - 1).where((value) => value > 0),
...row.children
.whereType<TableCellElement>()
.map((cell) => cell.rowspan - 1),
];
}
// Place the cells in the rows/columns
final cells = <GridPlacement>[];
final columnRowOffset = List.generate(columnMax, (_) => 0);
final columnColspanOffset = List.generate(columnMax, (_) => 0);
int rowi = 0;
for (var row in rows) {
int columni = 0;
for (var child in row.children) {
if (columni > columnMax - 1) {
break;
}
if (child is TableCellElement) {
while (columnRowOffset[columni] > 0) {
columnRowOffset[columni] = columnRowOffset[columni] - 1;
columni +=
columnColspanOffset[columni].clamp(1, columnMax - columni - 1);
}
cells.add(GridPlacement(
columnStart: columni,
columnSpan: min(child.colspan, columnMax - columni),
rowStart: rowi,
rowSpan: min(child.rowspan, rows.length - rowi),
child: CssBoxWidget(
style: child.style
.merge(row.style), //TODO padding/decoration(color/border)
child: SizedBox.expand(
child: Container(
alignment: child.style.alignment ??
context.style.alignment ??
Alignment.centerLeft,
child: _renderTableCell(context, child, columnMax, onLinkTap),
// child: CssBoxWidget.withInlineSpanChildren(
// children: [context.parser.parseTree(context, child)],
// style: child.style, //TODO updated this. Does it work?
// ),
),
),
),
));
columnRowOffset[columni] = child.rowspan - 1;
columnColspanOffset[columni] = child.colspan;
columni += child.colspan;
}
}
while (columni < columnRowOffset.length) {
columnRowOffset[columni] = columnRowOffset[columni] - 1;
columni++;
}
rowi++;
}
// Create column tracks (insofar there were no colgroups that already defined them)
List<TrackSize> finalColumnSizes = columnSizes.take(columnMax).toList();
finalColumnSizes += List.generate(max(0, columnMax - finalColumnSizes.length),
(_) => const IntrinsicContentTrackSize());
if (finalColumnSizes.isEmpty || rowSizes.isEmpty) {
// No actual cells to show
return const SizedBox();
}
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: LayoutGrid(
gridFit: GridFit.loose,
columnSizes: finalColumnSizes,
rowSizes: rowSizes,
children: cells,
),
);
}
Widget _renderTableCell(
RenderContext context,
StyledElement tree,
int columnMax,
OnLinkTapCallback? onLinkTap,
) {
final width = MediaQuery.of(context.buildContext).size.width;
return Container(
constraints:
BoxConstraints(maxWidth: columnMax > 1 ? width / 3 * 2 : width - 35),
padding: EdgeInsets.all(5),
child: Html(
shrinkWrap: true,
data: tree.element?.innerHtml,
style: {
'*': Style(display: Display.inline),
},
onLinkTap: onLinkTap,
),
);
}
Preview:

I'm having issues rendering this table, but I don't know if it's something that I can fix or if the issues comes from the package. Do you have any advices?
I'm using those versions:
flutter_html: ^3.0.0-beta.2
flutter_html_table: ^3.0.0-beta.2
<table id="table-id" class="table table-responsive" border="0" data-mce-fragment="1" bordercolor="#eee">
<tr data-mce-fragment="1">
<td data-mce-fragment="1">
<p data-mce-fragment="1"><strong data-mce-fragment="1">TEST</strong></p>
</td>
<td data-mce-fragment="1">
<p data-mce-fragment="1"><strong data-mce-fragment="1">Test -</strong><span data-mce-fragment="1"> </span><em data-mce-fragment="1"><strong data-mce-fragment="1">Test</strong></em></p>
</td>
<td data-mce-fragment="1">
<p data-mce-fragment="1"><strong data-mce-fragment="1">Test -</strong><span data-mce-fragment="1"> </span><em data-mce-fragment="1"><strong data-mce-fragment="1">Test</strong></em></p>
</td>
<td data-mce-fragment="1">
<p data-mce-fragment="1"><strong data-mce-fragment="1">Test</strong></p>
</td>
<td data-mce-fragment="1">
<p data-mce-fragment="1"><strong data-mce-fragment="1">Test</strong></p>
</td>
</tr>
<tr data-mce-fragment="1">
<td data-mce-fragment="1">
<p data-mce-fragment="1">Lorem</p>
</td>
<td data-mce-fragment="1">
<p data-mce-fragment="1">Lorem</p>
</td>
<td data-mce-fragment="1">
<p data-mce-fragment="1">Lorem</p>
</td>
<td data-mce-fragment="1">
<p data-mce-fragment="1">Lorem</p>
</td>
<td data-mce-fragment="1">
<p data-mce-fragment="1">Lorem</p>
</td>
</tr>
</table>
Error:
The following RenderObject was being processed when the exception was fired: RenderLayoutGrid#bf57a relayoutBoundary=up25 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
creator: LayoutGrid ← LayoutBuilder ← MediaQuery ← Padding ← DecoratedBox ← ConstrainedBox ←
Container ← _CSSBoxRenderer ← CssBoxWidget ← Semantics ← RichText ← Text ← ⋯
parentData: offset=Offset(0.0, 0.0) (can use size)
constraints: BoxConstraints(w=337.0, 0.0<=h<=Infinity)
size: MISSING
@lorenzOliveto We have the same problem when we have p tag in td.
Any update on this, please? Rendering, a p, div, etc inside a td prevents the table from rendering.
i have the same issue, any update?
I'm having issues rendering this table, but I don't know if it's something that I can fix or if the issues comes from the package. Do you have any advices?
I'm using those versions:
flutter_html: ^3.0.0-beta.2 flutter_html_table: ^3.0.0-beta.2
<table id="table-id" class="table table-responsive" border="0" data-mce-fragment="1" bordercolor="#eee"> <tr data-mce-fragment="1"> <td data-mce-fragment="1"> <p data-mce-fragment="1"><strong data-mce-fragment="1">TEST</strong></p> </td> <td data-mce-fragment="1"> <p data-mce-fragment="1"><strong data-mce-fragment="1">Test -</strong><span data-mce-fragment="1"> </span><em data-mce-fragment="1"><strong data-mce-fragment="1">Test</strong></em></p> </td> <td data-mce-fragment="1"> <p data-mce-fragment="1"><strong data-mce-fragment="1">Test -</strong><span data-mce-fragment="1"> </span><em data-mce-fragment="1"><strong data-mce-fragment="1">Test</strong></em></p> </td> <td data-mce-fragment="1"> <p data-mce-fragment="1"><strong data-mce-fragment="1">Test</strong></p> </td> <td data-mce-fragment="1"> <p data-mce-fragment="1"><strong data-mce-fragment="1">Test</strong></p> </td> </tr> <tr data-mce-fragment="1"> <td data-mce-fragment="1"> <p data-mce-fragment="1">Lorem</p> </td> <td data-mce-fragment="1"> <p data-mce-fragment="1">Lorem</p> </td> <td data-mce-fragment="1"> <p data-mce-fragment="1">Lorem</p> </td> <td data-mce-fragment="1"> <p data-mce-fragment="1">Lorem</p> </td> <td data-mce-fragment="1"> <p data-mce-fragment="1">Lorem</p> </td> </tr> </table>
Error:
The following RenderObject was being processed when the exception was fired: RenderLayoutGrid#bf57a relayoutBoundary=up25 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE: creator: LayoutGrid ← LayoutBuilder ← MediaQuery ← Padding ← DecoratedBox ← ConstrainedBox ← Container ← _CSSBoxRenderer ← CssBoxWidget ← Semantics ← RichText ← Text ← ⋯ parentData: offset=Offset(0.0, 0.0) (can use size) constraints: BoxConstraints(w=337.0, 0.0<=h<=Infinity) size: MISSING
Hey @lorenzOliveto were you able to figure out a workaround for this?