【问题标题】:How to close Dialog using FlutterDriver如何使用 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。

标签: flutter flutter-test


【解决方案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吗?如果不是,您的测试将失败。如果您的问题是如何测试这种行为,您可以编辑您的问题,也许会得到您正在寻找的答案。现在我看到的唯一问题是“我想知道如何在对话框之外点击以关闭它。”我只是想帮忙。
猜你喜欢
  • 2020-03-02
  • 2011-09-15
  • 2019-08-13
  • 2011-12-14
  • 1970-01-01
  • 2011-02-25
  • 2012-12-13
  • 1970-01-01
相关资源
最近更新 更多