Flu*_*ned 5 flutter flutter-test flutter-provider
我为我的小部件创建了以下 Flutter 测试
testWidgets("", (WidgetTester tester) async {
await tester.pumpWidget(
ChangeNotifierProvider<SettingsViewProvider>(
create: (context) => SettingsViewProvider(),
child: MaterialApp(
localizationsDelegates: [S.delegate],
home: SettingsScreen(),
),
),
);
final textFormFieldFinder = find.byElementType(TextFormField);
await tester.pump();
expect(textFormFieldFinder, findsNWidgets(3));
});
Run Code Online (Sandbox Code Playgroud)
该小部件是一个有状态的小部件,它使用 ChangeNotifierProvider 并且消费者围绕着一个包含三个“TextFormFields”的列表。
Consumer<State>(
builder: (context, value, child)=> Column(
children: [TextFormField(...), TextFormField(...), TextFormField(...)];
)
)
Run Code Online (Sandbox Code Playgroud)
预期:小部件树中正好有 3 个匹配节点
实际:_ElementTypeFinder:
其中:意味着没有找到,但有些是预期的
不幸的是,我收到在小部件树中找不到小部件。
似乎可以使用以下方法解决:
final textFormFieldFinder = find.byType(TextFormField);
Run Code Online (Sandbox Code Playgroud)
代替:
final textFormFieldFinder = find.byElementType(TextFormField);
Run Code Online (Sandbox Code Playgroud)
如前所述,您应该使用find.byTypewhich 旨在搜索 Widgets 而不是find.byElementTypewhich 处理元素。
Flutter 有 3 个构建 UI 块:
Widgets(immutable) -> Elements(mutable) -> Render Objects
-- 它们不是相互继承的,它们是具有不同目的的不同类型的对象。
TextFormField是 a Widget,而它正在被传递给find.byElementType它的祖先Element
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |