【问题标题】:In Flutter widget testing, I cant seem to find a widget even though I can find its children and parent在 Flutter 小部件测试中,我似乎无法找到一个小部件,即使我可以找到它的子级和父级
【发布时间】:2021-09-06 17:36:35
【问题描述】:

我正在尝试进行小部件测试,并且我有一个这样的小部件,并且 item = [] 中的对象是 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
  });

但即使 ExpansionPanel 是 NodeWidget 的父级和 ExpansionListTile 的子级,下面的代码也无法正常工作:

expect(find.byType(ExpansionPanel), findsNWidgets(4)); // it fails cause it 0 even tho there are 4 ExpansionPanel displayed on Screen;

可能是什么问题?

【问题讨论】:

    标签: flutter flutter-test


    【解决方案1】:

    ExpansionPanel 不是一个小部件,而是一个将 Widget 属性作为子级保存的类。

    【讨论】:

      猜你喜欢
      • 2017-10-21
      • 2022-12-12
      • 2021-06-24
      • 2022-08-03
      • 2021-02-04
      • 1970-01-01
      • 2022-01-19
      • 2021-08-19
      • 2018-04-28
      相关资源
      最近更新 更多