通常情况下,您可以使用find.text()
来查找整个字符串,
expect(find.text('text to find'), findsOneWidget);
如何在Text
小部件中查找子字符串?假设有'text to find'
的文本,我们只是想检查'to'
是否是Text
小部件的一部分。
答案 0 :(得分:2)
通过使用find.byWidgetPredicate
,您可以指定自己的验证谓词,从而检查所需的所有内容,例如文本的子字符串。
例如:
expect(find.byWidgetPredicate((widget) {
if (widget is Text) {
final Text textWidget = widget;
if (textWidget.data != null)
return textWidget.data.contains('mySubstr');
return textWidget.textSpan.toPlainText().contains('mySubstr');
}
return false;
}), findsOneWidget);
答案 1 :(得分:0)
现在,使用dart扩展方法,我们可以编写更具可读性的测试。
首先,向CommonFinders类添加一个新方法:
extension CustomFinders on CommonFinders {
Finder textMatch(Pattern pattern, {bool skipOffstage = true}) =>
_PatternMatchFinder(pattern, skipOffstage: skipOffstage);
}
class _PatternMatchFinder extends MatchFinder {
_PatternMatchFinder(this.pattern, {bool skipOffstage = true}) : super(skipOffstage: skipOffstage);
final Pattern pattern;
@override
String get description => 'textMatch "$pattern"';
@override
bool matches(Element candidate) {
final Widget widget = candidate.widget;
if (widget is Text) {
if (widget.data != null) return pattern.allMatches(widget.data).isNotEmpty;
return pattern.allMatches(widget.textSpan.toPlainText()).isNotEmpty;
} else if (widget is EditableText) {
return pattern.allMatches(widget.controller.text).isNotEmpty;
}
return false;
}
}
现在我们的测试如下:
expect(find.textMatch('Back'), findsOneWidget);
expect(find.textMatch(RegExp(r'\s*Back.*')), findsOneWidget);