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

最近发表

浏览 32
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报