【问题标题】:How can I find `FlatButton.icon` in a Flutter tests?如何在 Flutter 测试中找到“FlatButton.icon”?
【发布时间】:2020-10-01 19:24:58
【问题描述】:

在我的应用程序中,我使用FlatButton.icon (Flutter docs) 创建了一个按钮。现在我正在尝试在测试期间找到按钮。

我试过了

find.byType(MaterialButton); // -> zero widgets
find.byType(FlatButton); // -> zero widget

奇怪的是我可以找到按钮的文字

find.text('my button text');

我还可以找到按钮的图标

find.byType('Icon');

我不确定我应该搜索什么才能找到该按钮。

【问题讨论】:

    标签: flutter widget-test-flutter


    【解决方案1】:

    我遇到了这个问题,并从颤振不和谐服务器那里得到了一些帮助,在这里我分享一下解决方案: 注意:您必须对返回的小部件使用动态,因为该类是私有的。

    void main() {
      testWidgets('TextButton.icon test', (WidgetTester tester) async {
        const IconData iconData = Icons.add;
    
        await tester.pumpWidget(
          MaterialApp(
            home: Center(
              child: TextButton.icon(
                onPressed: () { },
                icon: const Icon(iconData),
                label: const Text('text button'),
              ),
            ),
          ),
        );
        final dynamic textButtonWithIconWidget = tester.widget(find.byWidgetPredicate((Widget widget) => '${widget.runtimeType}' == '_TextButtonWithIconChild'));
        expect(textButtonWithIconWidget.icon, const Icon(iconData));
      });
    }
    

    【讨论】:

      【解决方案2】:

      尽管这个问题可能看起来很老,但我想扩展该主题,因为没有一个答案实际上显示了如何找到 FlatButton 本身。问题是FlatButton.icon 不是构造函数,而是创建不同对象_FlatButtonWithIcon 扩展FlatButton 的工厂,这显然只能在其文件中使用。同时,find.byType 仅查找相同类型的小部件 - 它不适用于派生类型。

      所以,返回对象本身:find.ancestor(of: find.byIcon(Icons.your_icon), matching: find.byWidgetPredicate((widget) => widget is FlatButton))。这种方法可以让我们获取按钮对象,从而通过调用find.descendant来测试它的属性(例如onPressed)或子小部件(例如label)。

      【讨论】:

      • @YazeedAlKhalaf,当然!您可以通过我上面提到的方法获取查找器,然后使用它来获取标签小部件。假设它是一个文本:final textFinder = find.descendant(of: flatBtnFinder, matching: find.byType(Text))。稍后您可以通过 WidgetTester 从小部件本身检索其标签:final btnLabel = tester.widget<Text>(textFinder).data
      【解决方案3】:

      好的,所以我无法找到 FlatButton 本身,但很容易找到带有 . . .

      find.byIcon(Icons.yourIcon);
      

      有关更多信息,请参阅相关文档:flutter_test find.byIcon

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-06
        • 2022-12-12
        • 1970-01-01
        • 2022-11-29
        • 2019-04-29
        • 1970-01-01
        • 2019-10-28
        • 2019-04-23
        相关资源
        最近更新 更多