如何使用 FlutterDriver 关闭对话框

Posted

技术标签:

【中文标题】如何使用 FlutterDriver 关闭对话框【英文标题】:How to close Dialog using FlutterDriver 【发布时间】:2019-10-29 08:37:45 【问题描述】:

有没有办法通过“轻按它”来关闭对话框,即在内容之外轻按以使用 Flutter Driver 关闭它?

我的问题是对话框没有任何可以关闭它的按钮。相反,用户应该点击它外部或使用后退按钮。但是,FlutterDriver 没有“返回”选项。

因此,我想知道如何在对话框之外点击以关闭它。

【问题讨论】:

因为 tap 方法点击了小部件的中心,这可能是一个问题。你有 AppBar 吗?在这种情况下,您可以点击它。 看来唯一的解决方案是在对话框中添加一个关闭按钮。 flutter_driver pageBack api.flutter.dev/flutter/flutter_driver/CommonFinders/… 是否可以在这里工作? 您可以尝试获取对话框的heightwidth,然后使用driver.scroll 的增量(dx,dy)来点击吗?例如:如果对话框宽度为 100,则使用driver.scroll s dx 参数并将 dx 值传递为大于 100。 【参考方案1】:

Flutter 中 modals 常用的键是ModalBarrier,这就是为什么下面应该做的伎俩:

await driver.tap(find.byType('ModalBarrier'));

只要将barrierDismissible 设置为true,这将起作用。 本质上,当轻敲 Flutter 中的对话框时,您正在轻敲模态屏障,这就是上述代码有效的原因。


感谢John Muchow for finding out。

【讨论】:

不适用于 Flutter 1.17.5。你用的是哪个版本?【参考方案2】:

您可能希望将对话框的 barrierDismissible 属性设置为 true 并添加一个 barrierLabel。

这将允许您点击外部并关闭对话框

https://api.flutter.dev/flutter/widgets/showGeneralDialog.html

【讨论】:

barrierDismissible 参数用于确定是否可以通过点击模态屏障来关闭该路线。此参数默认为 true。如果 barrierDismissible 为真,则必须提供非空的 barrierLabel。你提供了barrierLabel吗?展示你的代码也很有帮助。 必须提供barrierLabel 的原因是为了让人们使用屏幕阅读器。如果您不提供一种方法让颤振告诉屏幕阅读器这是关闭模式的方法,那么用户将不知道如何。 Flutter 强制执行此操作。 您写道“因此,我想知道如何在对话框之外点击以关闭它。”我给你提供了正确的答案。您的问题与 FlutterDriver 无关。您想关闭对话框。您是正确的,barrierDismissible 默认设置为 true。但是,当您在外面点击时它不会关闭,因为您没有设置barrierLabel。这是我可以在不看代码的情况下给您的最佳答案。你为什么不试一试,让我知道。 我的回答对于测试和手动输入都是正确的。如果 barrierDismissible 为真,则必须提供非空的 barrierLabel。你有barrierLabel吗?如果不是,您的测试将失败。如果您的问题是如何测试这种行为,您可以编辑您的问题,也许会得到您正在寻找的答案。现在我看到的唯一问题是“我想知道如何在对话框之外点击以关闭它。”我只是想帮忙。

以上是关于如何使用 FlutterDriver 关闭对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何使用预定义函数关闭 JQuery 对话框?

C++ Qt库 如何修改对话框本身的属性(如:最大化、最小化按钮、关闭按钮、边框粗细、颜色等)

关闭对话框后如何触发方法

Flutter 驱动程序与原生元素交互

Flutter 驱动程序:测试 BottomNavigationBarItem

获取 MFC 对话框关闭原因