【问题标题】:Finding a TextSpan to tap on with Flutter tests找到一个 TextSpan 来使用 Flutter 测试
【发布时间】:2020-05-31 11:50:52
【问题描述】:

使用 Flutter WidgetTester 如何点击 TextSpan,如下面的代码所示?

RichText(
  text: TextSpan(
    children: [
      TextSpan(text: 'aaa '),
      TextSpan(
        text: 'bbb ',
        recognizer: TapGestureRecognizer()
          ..onTap = () { 
            // How to reach this code in a widget test?
          },
      ),
      TextSpan(text: 'ccc'),
    ],
  ),
)

【问题讨论】:

  • this 教程对您没有帮助?
  • @P4yam,不,因为 TextSpan 不是小部件。但公认的答案很棒。

标签: flutter flutter-test


【解决方案1】:

CommonFinders byWidgetPredicate method

InlineSpan visitChildren method

查找 TextSpan:

final finder = find.byWidgetPredicate(
  (widget) => widget is RichText && tapTextSpan(widget, "bbb "),
);
bool findTextAndTap(InlineSpan visitor, String text) {
  if (visitor is TextSpan && visitor.text == text) {
    (visitor.recognizer as TapGestureRecognizer).onTap();

    return false;
  }

  return true;
}

bool tapTextSpan(RichText richText, String text) {
  final isTapped = !richText.text.visitChildren(
    (visitor) => findTextAndTap(visitor, text),
  );

  return isTapped;
}

【讨论】:

  • 在 FlutterDriver 中找不到 byWidgetPredicate 方法。
  • 不是绝对的,但有助于理解流程。
  • 我也试过了,但对我有用的是在 tester .widget<RichText>(find.byKey(<key>)) 之前找到小部件,然后调用建议的 tapTextSpan(...) 函数。
猜你喜欢
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2021-08-07
  • 2019-12-05
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多