• Flutter :用什么代替 willPopScope?
  • 发布于 1个月前
  • 66 热度
    0 评论
什么是 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。
用户评论