Flutter Html组件渲染特定HTML表格时抛出LayoutBuilder异常
The following RenderObject was being processed when the exception was fired: RenderLayoutGrid#b5a0d relayoutBoundary=up31 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
RenderObject: RenderLayoutGrid#b5a0d relayoutBoundary=up31 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...
## 解决方法 ### 1. 给Html组件添加明确的宽度约束 错误本质是`Html`组件在嵌套布局环境中无法正确计算内在尺寸,通过给组件指定固定宽度或传递父级约束可以解决: - 用`Container`指定宽度: ```dart Container( width: MediaQuery.of(context).size.width - 2 * padding, child: Html(data: "yourNestedTableHtml"), )
- 用
LayoutBuilder传递父级约束:
LayoutBuilder( builder: (context, constraints) { return Html( data: "yourNestedTableHtml", style: { "table": Style(width: constraints.maxWidth), }, ); }, )
2. 调整HTML内容的异常样式
原HTML中font-size:1px和line-height:1px这类极小值会干扰布局计算,同时空内容 也可能引发问题,修改这些内容:
调整后的HTML示例:
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"> <tr> <td height="70" style="font-size: 12px; line-height: 1.2;"> <a name="1"></a> </td> </tr> <tr> <td> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"> <tr> <td style="font-size: 12px; line-height: 1.2;">sdfsd</td> </tr> </table> </td> </tr> <tr> <td height="20"></td> </tr> </table>
3. 升级html包版本
如果使用的是flutter_html包,旧版本可能存在嵌套表格的布局bug,升级到最新稳定版,多数布局异常问题已在新版本中修复。
内容的提问来源于stack exchange,提问作者Emaborsa
相关产品推荐
相关产品推荐

