有没有一种简单的方法可以在Flutter测试中找到从RichText构建的特定文本?

时间:2016-12-14 21:15:22

标签: flutter

例如,我可能在当前窗口小部件树中有一个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!'),但它不起作用,因为它不是文本。

3 个答案:

答案 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);

有了孩子,我可以断言他们是按预期生成的