3

我有一个扩展 EditableText 的类,它提供样式编辑 - 颜色跨度等。

父小部件有一个 bool 标志来使用默认 TextInput 或扩展 EditableText 的自定义标志。

测试适用于默认测试:

final String dummyDesc = 'dummy desc';
final Finder mention = find.byType(Mention);
await tester.enterText(mention, dummyDesc);

但是,如果我在 Mention 使用自定义输入的页面上执行相同操作,则测试将失败,因为它找不到 TextInput - 因为没有。

错误:

Bad state: No element

如何在扩展 EditableText 的小部件上使用 enterText?或者类似的东西?

4

1 回答 1

2

这似乎是由于内部调用的showKeyboard方法: https ://github.com/flutter/flutter/blob/3b067049adc14ffb300e78d9b0d0adf3d581de7c/packages/flutter_test/lib/src/widget_tester.dart#L854enterText

它正在检查 finder 是否匹配或者是 的后代EditableText,它根据 runtimeType 进行匹配。

这有点 hacky,但你可以提供一个 runtimeType getter,它EditableText会返回并允许它工作。

class Mention extends EditableText {
  // ...

  Type get runtimeType => EditableText;

  // ...
}

警告:这将意味着您将无法再这样做find.byType(Mention)。您可以通过编写自定义查找器或使用谓词查找器来解决此问题find.byElementPredicate((Element element) => element.widget is Mention)

于 2020-05-13T08:34:54.217 回答