我正在寻找一种拦截导航的方法返回 有条件的。
用户/服务器可以修改应用程序的全局状态,如身份验证,导致页面导航到登录表单,但是当用户导航到屏幕 A 然后按 返回按钮 两次,用户仍然能够看到应该仅可用于登录 session 的小部件。
我已经尝试了所有我能想到的:
navigatorObservers
收到有关 Navigator.pop 事件的通知似乎无法阻止导航 理想情况下,希望在每个小部件(如 back_button_interceptor)上使用钩子(Hook)来避免第 3 方依赖。
它也应该适用于无状态小部件,其中
dispose()
方法不可用。有没有办法获得类似单类/故障点“导航拦截器”的东西,它会返回真/假并能够根据条件修改飞行中的路线?
最佳答案
查看 WillPopScope 的实现,它利用了 ModalRoute 的 addScopedWillPopCallback() 函数。
https://api.flutter.dev/flutter/widgets/ModalRoute/addScopedWillPopCallback.html
如果您使用 onGenerateRoute 实现了路由器,则应该可以为您推送的每条路由添加通用检查。也许您甚至可以创建一个继承自包含该逻辑的 MaterialPageRoute 的自定义 Route 类。
如果我正确理解了您的问题,我觉得拦截向后导航是错误的方法。当使用 Navigator.pushNamedAndRemoveUntil() 导航回登录屏幕时,我宁愿尝试从导航堆栈中删除未经授权的页面
关于flutter - 如何拦截 Navigator.pop 并有条件地阻止导航返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61910377/