本文介绍了如何在微件层次结构中定位多个相同类型的微件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为我的一个颤动Web应用程序开发一些集成测试。我想在下面的小部件层次结构树中具体定位容器(宽度:50,高度:50),考虑到自上而下的方法。ParentWidget-->;Row-->;Text,SizedBox,Row-->;Container(),Container(宽度:50,高度:50),Container()。注意:没有关键方法

我尝试使用带索引的ParentWidget-->;行-->;的后代进行定位尝试选择第二个容器,但这不起作用,它失败并显示错误&;错误状态:无元素

import 'package:flutter/material.dart';

class ParentWidget extends StatelessWidget {
  const ParentWidget({Key? key});

  @override
  Widget build(BuildContext context) {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        Text("Hello World..!!"),
        SizedBox(
          width: 20,
        ),
        Row(
          crossAxisAlignment: CrossAxisAlignment.end,
          children: [
            Container(
              width: 20,
              height: 20,
              color: Colors.red,
            ),
            Container(
              width: 50,
              height: 50,
              color: Colors.red,
            ),
            Container(
              width: 20,
              height: 20,
              color: Colors.red,
            ),
          ],
        ),
      ],
    );
  }
}
final container = tester.widget<Container>(find.descendant(
    of: find.descendant(
        of: find.byType(ParentWidget), matching: find.byType(Row)),
    matching: find.descendant(
        of: find.byType(Row), matching: find.byType(Container).at(1))));

推荐答案

要在一个测试中查找多个小部件,您可以执行以下操作:

testWidgets('Test containers', (tester) async {
    
    await tester.pumpWidget(ParentWidget());

    expect(find.byType(Container), findsNWidgets(3));
  });

有关详细信息,请查看https://docs.flutter.dev/cookbook/testing/widget/introduction

编辑:要测试第二个容器的宽度,可以执行如下操作:

//get the second element's widget, index 1, cast it as a container and check it's width
expect((find.byType(Container).evaluate().elementAt(1).widget as Container).constraints?.maxWidth, 50.0);

这篇关于如何在微件层次结构中定位多个相同类型的微件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-21 07:14