Flutter :用什么代替 willPopScope?
共 2038字,需浏览 5分钟
·
2024-07-18 11:30
大家好,在搜索了 willPopScope Widget 的替代品后,我在此与大家分享。让我们先简要介绍一下 WillpopScope Widget,以便您了解两者之间的区别。
什么是 WillpopScope Widget?
正如你们中的一些人所知,WillpopScope 是 flutter 中的一个 Widget,它允许我们在按下设备的后退按钮时执行一些任务或操作。借助此 Widget,当用户按下设备的后退按钮或通过将函数传递给“onWillPop”来执行任务时,我们可以导航到其他屏幕。
-
onWillPop
:此参数使用布尔值确定是否应弹出页面。或者,如果用户按后退按钮,我们可以显示对话框,或者我们可以执行任何其他任务。 -
child
:视图的小部件。在这里,我们添加了调用 onWillPop 函数时要处理的小部件。
WillpopScope({
Key? key,
required Widget child,
required WillPopCallback? onWillPop,
}
但是,有些人知道 WillpopScope 在 v3.12.0–1.0.pre 之后已被弃用。所以解决方案是“PopScope”。
什么是 PopScope Widget?
因此,正如我之前提到的,它是 WillPopScope
的替代方案,因此很明显您知道答案是什么。但是等等,让我来解释一下你的答案。
PopScope
类似于 WillpopScope
。它与 WillPopScope
一样,有助于管理系统的后置手势。它有三个参数:
-
canPop
:canPop 参数可用于启用/禁用系统后退手势。它接受布尔值。当设置为 true (默认)时,系统的后退手势可以正常工作。如果设置为 false ,它将禁用后退手势。 -
onPopInvoked
:onPopInvoked 参数是系统返回手势发生时触发的回调函数,无论成功与否。仅当canPop
参数设置为 true 时才会调用它,允许您执行自定义逻辑或执行特定操作以响应用户尝试向后导航。 -
child
:视图的小部件。在这里,我们添加了调用onPopInvoked
函数时要处理的小部件。
我在使用 PopScope 时遇到的问题
在我的案例中,我希望在用户尝试关闭页面时显示确认对话框,而 WillPopScope
在这种情况下工作得很好。
然而,设置 canPop: false
并在 onPopInvoked
内部编写对话提示逻辑,并不能解决问题,因为 NavigatorState.maybePop
的结果是在用户响应对话之前返回的。
此外,popDisposition
是同步的,而 willPop
是异步的。这导致无法提示对话。
最后,这就是我写这篇文章的原因,以便大家都可以阅读并弄清楚要使用什么。在我看来,我避免使用 PopScope
。
翻译自:https://medium.com/@web.pinkisingh/flutter-what-to-use-instead-of-willpopscope-89af2d5ff4c6