我在使用 PopScope 时遇到问题。
我从 WillPopScope 迁移到 PopScope。我的代码来自于此(为了更好的可视化,内部细节已被删除):
return WillPopScope(
child: tabBarPages(),
onWillPop: () async {
showExitPopup();
return false;
});
对此:
return PopScope(
child: tabBarPages(),
canPop: false,
onPopInvoked: (value) async {
showExitPopup();
});
概要结构如下: 支架 -> 主体:PopScope -> 子项:TabBarView
使用 WillPopScope 一切都运行完美,在 3 个 TabBarView 屏幕中的任何一个上,当按下“后退”按钮时,应用程序不会关闭,并且会出现询问用户是否真的要关闭应用程序的对话框。
但是现在使用 PopScope,在第二个或第三个屏幕上,屏幕不再显示对话框,而是变黑(表明应用程序已关闭,但并未实际关闭)。在第一个 TabBarView 屏幕上,对话框正常显示,但是,在屏幕 2 或 3 上,对话框不出现,并且屏幕变黑。
我回到已弃用的 WillPopScope,一切又恢复正常了。我该怎么办?如何在不使用已弃用的代码的情况下解决此问题?
理解问题 引入 PopScope 小部件是为了比 WillPopScope 更灵活地处理导航事件,但它似乎没有按照您的情况按预期管理屏幕(或页面)堆栈。 canPop: false 指令可能会有不同的解释,具体取决于导航堆栈的上下文和当前状态。
可能的解决方案 不要直接使用 canPop: false(这可能会阻止 onPopInvoked 在 TabBarView 的第二个和第三个屏幕上按预期调用),而是考虑手动管理弹出窗口。这涉及使用导航键并在决定是否显示弹出窗口或允许弹出之前检查导航堆栈状态。