#flutter #flutter-test
Вопрос:
Я пытаюсь провести тест виджета, и у меня есть такой виджет, и объекты в элементе = [] равны 4:
Widget _generateNodesWidget() {
return ListView(
children: [
Padding(
padding: const EdgeInsets.all(10.0),
child: ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
_items[index].isExpanded = !_items[index].isExpanded;
//TODO: Implement the call to blocks widget here
_items[index].body = _items[index].node.blocks.isEmpty ? _buildBlankBlockTile() : BlockWidget(nodeElement: _items[index],);
});
},
children: _items.map((NodeElement item) {
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: NodeWidget(node: item.node),
);
},
isExpanded: item.isExpanded,
body: item.body,
);
}).toList(),
))
],
);
}
выполнение этих тестов ниже также работает:
testWidgets('Verify the completion of the first call ',
(WidgetTester tester) async {
await tester.pumpWidget(
ChangeNotifierProvider<NodesProvider>(
create: (_) => NodesProvider(),
child: const MediaQuery(
data: MediaQueryData(),
child: MaterialApp(
home: ToysScreen(),
),
),
),
);
await tester.pumpAndSettle();
expect(find.byType(NodeWidget), findsNWidgets(4)); // this finds the NodeWidget
expect(find.byType(ExpansionPanelList), findsNWidgets(1)); // this finds the ExpansionPanelList
expect(find.byType(ListView), findsNWidgets(1)); // this finds the ListView
});
но приведенный ниже код никогда не работает, даже если панель расширения является родительской NodeWidget
и дочерней ExpansionListTile
:
expect(find.byType(ExpansionPanel), findsNWidgets(4)); // it fails cause it 0 even tho there are 4 ExpansionPanel displayed on Screen;
В чем может быть проблема?
Ответ №1:
ExpansionPanel-это не виджет, а скорее класс, который содержит свойство виджета в качестве дочернего элемента.