如何解决flutter_widget_from_html_core中customWidgetBuilder的意外换行问题?
解决flutter_widget_from_html_core自定义Widget前后自动换行问题
我在使用flutter_widget_from_html_core插件的customWidgetBuilder时遇到问题:给HTML添加自定义标签后,通过该方法生成的自定义Widget前后会自动出现换行。
我的代码:
HtmlWidget(qBox1ContentHtmlCopy, customWidgetBuilder: (element) { bool containHole = true; int hole = 0; String counter = ""; while (containHole) { hole++; counter = hole.toString(); if (!qBox1ContentHtmlCopy.contains("wahid$counter")) { containHole = false; } else if (element.localName == "wahid$counter") { return const Text( 'TEST', style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, ), ); } } return null; }, renderMode: RenderMode.column, textStyle: const TextStyle(fontSize: 14,), ),
HTML内容说明:
qBox1ContentHtmlCopy包含文本与自定义<wahid1>这类标签混合的内容,标签嵌入在普通文本段落中。
问题现象:
实际输出时,自定义生成的"TEST"文本前后被自动插入换行,原本应该和前后文本同行的内容被分隔成单独的行。
解决方法:
问题根源在于插件默认将未定义的自定义标签视为块级元素(display: block),块级元素会自动占据整行并添加前后换行。只需通过customStylesBuilder将自定义标签设置为行内元素即可解决:
修改代码,添加customStylesBuilder参数:
HtmlWidget(qBox1ContentHtmlCopy, customWidgetBuilder: (element) { bool containHole = true; int hole = 0; String counter = ""; while (containHole) { hole++; counter = hole.toString(); if (!qBox1ContentHtmlCopy.contains("wahid$counter")) { containHole = false; } else if (element.localName == "wahid$counter") { return const Text( 'TEST', style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, ), ); } } return null; }, // 添加以下代码,将自定义wahid标签设为行内元素 customStylesBuilder: (element) { if (element.localName.startsWith('wahid')) { return {'display': 'inline'}; } return null; }, renderMode: RenderMode.column, textStyle: const TextStyle(fontSize: 14), ),
原理说明:
通过customStylesBuilder给所有以wahid开头的自定义标签设置display: inline样式,让插件将它们识别为行内元素,行内元素会和前后文本保持在同一行,不会自动添加换行。
内容的提问来源于stack exchange,提问作者wahid anvary
相关产品推荐
相关产品推荐

