【问题标题】:Access Flutter route outside MaterialApp在 MaterialApp 外访问 Flutter 路由
【发布时间】:2018-09-04 03:22:55
【问题描述】:

我有一个“固定”的自定义应用栏小部件,它位于我的 Material App 之外。我希望此应用程序栏始终位于顶部,并且 Widget 视图可以更改。

我希望这个应用栏小部件能够监听 MaterialApp 中正在更新的路由并做出相应的反应。

我想我需要使用 RouteObserver,但我很难让这个应用栏订阅任何路线事件。我尝试广播一个流来通知任何监听它的小部件,但这会从 initState 生命周期钩子触发,所以只触发一次并且在调用 Navigator.pop() 时不会接收到

我试过这个https://docs.flutter.io/flutter/widgets/RouteObserver-class.html

关于如何实现这一点的任何想法?

【问题讨论】:

  • 如果 MateriallApp 有一个 onChange 事件就好了,例如 new MaterialApp( onGenerateRoute: (RouteSettings 设置), onRouteChange (RouteSettings 设置),

标签: dart flutter


【解决方案1】:

我不确定这是否是在 MaterialApp 外部处理 Route 的正确方法,但这就是我解决问题的方法。

我开始使用 Fluro 导航器 https://github.com/goposse/fluro,它为我提供了一个更好的路线框架供我使用。

我现在有一个静态方法来处理 Fluro 路由以及将视图更改流事件广播到任何侦听我的新 Application.doRoute(context, path) 的组件。

在 Application.doRoute(..) 中,我将添加到我自己的自定义 _history 列表中,该列表具有每个新路由的上下文和路径。然后我可以调用另一个名为 Application.doBack() 的静态函数,然后弹出 _history 中的最后一项并再次广播视图更改流。

我现在可以让根显示列表级别的小部件对 MaterialApp 中的更改做出反应。

Navigator.pushNamed 和 Navigator.pop() 现已替换为 Application.doRoute() 和 Application.goBack()

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2020-11-22
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多