flutter test enterText on widget extending EditableText "Bad state: No element" :构建可编辑文本以供提及
flutter test enterText on widget extending EditableText "Bad state: No element" : building editable text for mention
我有一个扩展了 EditableText 的 class,它提供样式编辑 - 颜色跨度等等。
父小部件有一个 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?或者类似的东西?
这似乎是由于 enterText
内部调用的 showKeyboard
方法:https://github.com/flutter/flutter/blob/3b067049adc14ffb300e78d9b0d0adf3d581de7c/packages/flutter_test/lib/src/widget_tester.dart#L854
它正在检查查找器是否匹配 EditableText
或它是 EditableText
的后代,它根据 runtimeType 进行匹配。
它有点老套,但您可以提供一个运行时类型 getter,returns EditableText
并允许它工作。
class Mention extends EditableText {
// ...
Type get runtimeType => EditableText;
// ...
}
警告:这意味着您将无法再find.byType(Mention)
。您可以通过编写自定义查找器或使用谓词查找器 find.byElementPredicate((Element element) => element.widget is Mention)
.
来解决此问题
我有一个扩展了 EditableText 的 class,它提供样式编辑 - 颜色跨度等等。
父小部件有一个 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?或者类似的东西?
这似乎是由于 enterText
内部调用的 showKeyboard
方法:https://github.com/flutter/flutter/blob/3b067049adc14ffb300e78d9b0d0adf3d581de7c/packages/flutter_test/lib/src/widget_tester.dart#L854
它正在检查查找器是否匹配 EditableText
或它是 EditableText
的后代,它根据 runtimeType 进行匹配。
它有点老套,但您可以提供一个运行时类型 getter,returns EditableText
并允许它工作。
class Mention extends EditableText {
// ...
Type get runtimeType => EditableText;
// ...
}
警告:这意味着您将无法再find.byType(Mention)
。您可以通过编写自定义查找器或使用谓词查找器 find.byElementPredicate((Element element) => element.widget is Mention)
.