首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TextSpan中测试文本

在TextSpan中测试文本
EN

Stack Overflow用户
提问于 2018-07-09 13:08:13
回答 6查看 2.1K关注 0票数 13

如果我们有一个作为RichText小部件子级的TextSpan,您将如何测试文本内容。

代码语言:javascript
复制
new TextSpan(
  text: 'Hello world!',
  style: new TextStyle(color: Colors.black),
)

在您的测试中,使用Text小部件可以使用expect(find.text('Hello world!'), findsOneWidget),但是如果您有一个TextSpan,这将不起作用。

expect(find.byType(TextSpan), findsOneWidget)也找不到任何TextSpan类型的小部件。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-07-09 16:22:45

这是不可能的。因为TextSpan实际上并不渲染任何东西。它是另一个对象用来实际呈现某物的数据信息。

相反,您可以做的是找到要向其传递TextSpan的小部件。然后验证它的正确性

票数 7
EN

Stack Overflow用户

发布于 2019-09-10 03:18:43

除了Rémi的答案之外,还有一种从RichText中查找文本的方法。将关键点设置为RichText,然后可以执行以下操作:

代码语言:javascript
复制
Finder widgetFinder = find.byKey(key);

Finder rtFinder =
   find.descendant(of: widgetFinder, matching: find.byType(RichText));
RichText richText = rtFinder.evaluate().first.widget as RichText;
String richTextText = richText.text.toPlainText();

print('Text from Text widget: $richTextText');
expect(richTextText, 'This is my text',
   reason: 'Text from found text widget do not match');
票数 6
EN

Stack Overflow用户

发布于 2020-03-22 01:40:33

您可以找到RichText小部件。下面是find.byWidgetPredicate调用。

代码语言:javascript
复制
expect(find.byWidgetPredicate((widget) => fromRichTextToPlainText(widget) == 'Hello world!'), findsOneWidget);

下面是fromRichTextToPlainText帮助器函数。将它传递给RichText小部件,它将返回所有底层TextSpans的纯文本。

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51238526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档