例如,我可能在当前窗口小部件树中有一个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!'),
],
),
)
我尝试使用find.text('Hello bold world!')
,但它不起作用,因为它不是文本。
答案 0 :(得分:6)
这是find.byWidgetPredicate调用。
find.byWidgetPredicate((widget) => fromRichTextToPlainText(widget) == 'Hello bold world!')
这是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;
}
答案 1 :(得分:4)
最简单的解决方案是在RichText上放一个密钥并以这种方式读取它。
如果由于某种原因这不合适,你可以使用find.byWidgetPredicate并传递一个匹配RichText小部件的函数,其中text.toPlainText()返回你想要的字符串。
答案 2 :(得分:0)
我通过更手动地深入研究小部件来解决了这个问题
final richTextWidget = tester.element(richTextFinder).widget as RichText;
print(richTextWidget.text.children);
有了孩子,我可以断言他们是按预期生成的