如何在 Flutter 测试中找到“FlatButton.icon”?

0p3*_*t0r 6 flutter widget-test-flutter

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

我试过了

find.byType(MaterialButton); // -> zero widgets
find.byType(FlatButton); // -> zero widget
Run Code Online (Sandbox Code Playgroud)

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

find.text('my button text');
Run Code Online (Sandbox Code Playgroud)

我还可以找到按钮的图标

find.byType('Icon');
Run Code Online (Sandbox Code Playgroud)

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

0p3*_*t0r 6

好吧,所以我无法找到 FlatButton 本身,但很容易找到带有 的图标。。。

find.byIcon(Icons.yourIcon);
Run Code Online (Sandbox Code Playgroud)

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


Ole*_*rov 6

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

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