Flutter的WidgetTester具有pageBack()
方法,用于弹出路由堆栈。当我使用MaterialPageRoute的fullscreenDialog
属性以全屏对话框形式打开页面时,pageBack()
方法不起作用(“屏幕上应有一个后退按钮”)。我找不到其他替代方法。
在Flutter测试中取消/关闭对话框的标准方法是什么?
我能够如下关闭对话框:
await tester.tap(find.byIcon(Icons.close));
但是我本来可以做一个pageBack()
,如下所示:
await tester.tap(find.byIcon(Icons.arrow_back));
为什么有pageBack()
方法却没有等效的对话框关闭方法?
我尚未编写我的Cupertino用户界面。该测试是否需要寻找其他图标?
另请参阅类似的problem I had with selecting the overflow menu。
更新:也许pageBack()
模拟了按系统后退按钮,而不是后退箭头?在这种情况下,就无需在iOS上模拟行为,无论如何,我必须通过图标找到后退按钮以模拟按下它。
答案 0 :(得分:0)
我早些时候也遇到过类似的问题,我发现以下适用于我的情况的解决方案。
Navigator.of(context, rootNavigator: true).pop('dialog')
或者您可以这样写,
Navigator.of(context).pop();
Navigator.pop(context);
您可以在此处查看Flutter Navigation and Routing上的简要文档。
希望如此。祝你有美好的一天。
答案 1 :(得分:0)
您可以有一个对话框,其中包含一个带有文本“X”的按钮,用于弹出对话框。 这个按钮,你可以用
找到await tester.tap(find.text('X'));
不要忘记用水龙头抽水
await tester.pumpAndSettle();
查看 Flutter 团队用来测试对话框的完整代码示例:source code
答案 2 :(得分:-1)
我认为通过Icons.close查找是合理的。我在我的应用中也做了类似的事情。另一个选择是假设导航栏中按钮的x,y,然后点击屏幕上的该位置。