例如,我可能在当前的小部件树中有一个RichText,看起来像
new RichText(
text: new TextSpan(
text: 'Hello ',
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
new TextSpan(text: 'bold', style: new TextStyle(fontWeight: FontWeight.bold)),
new TextSpan(text: ' world!'),
],
),
)
Run Code Online (Sandbox Code Playgroud)
我尝试使用,find.text('Hello bold world!')但因为它不是文本,所以无法使用。
cre*_*not 34
我最近将此功能贡献给了 Flutter 框架,即内置的查找器。
find.text()您现在可以启用一个findRichText参数,该参数也将找到独立的RichText小部件:
find.text(
'Hello bold world!',
findRichText: true,
)
Run Code Online (Sandbox Code Playgroud)
这是 find.byWidgetPredicate 调用。
find.byWidgetPredicate((widget) => fromRichTextToPlainText(widget) == 'Hello bold world!')
Run Code Online (Sandbox Code Playgroud)
这是 fromRichTextToPlainText 辅助函数。将 RichText 小部件传递给它,它将返回纯文本。
String fromRichTextToPlainText(final Widget widget) {
if (widget is RichText) {
if (widget.text is TextSpan) {
final buffer = StringBuffer();
(widget.text as TextSpan).computeToPlainText(buffer);
return buffer.toString();
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案是将密钥放在RichText上,然后以这种方式读取。
如果由于某种原因这不是一个很好的选择,则可以使用find.byWidgetPredicate并传递一个与RichText小部件相匹配的函数,这些小部件的text.toPlainText()返回所需的字符串。
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |