gpt4 book ai didi

flutter - 如何拦截 Navigator.pop 并有条件地阻止导航返回?

转载 作者:行者123 更新时间:2023-12-03 03:34:24 30 4
gpt4 key购买 nike

我正在寻找一种拦截导航的方法返回 有条件的。

用户/服务器可以修改应用程序的全局状态,如身份验证,导致页面导航到登录表单,但是当用户导航到屏幕 A 然后按 返回按钮 两次,用户仍然能够看到应该仅可用于登录 session 的小部件。

我已经尝试了所有我能想到的:

  • MaterialApp中的onGenerateRoute,但按下后退按钮时未触发
  • WillPop 是一个解决方案,但所有顶级小部件都必须包含在其中,我需要记住将身份验证状态传递给所有小部件,它不是真正可扩展的解决方案,但可以工作
  • 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/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com