繁体   English   中英

Flutter | 如何监听导航事件?

[英]Flutter | How to listen for navigation event?

在Flutter中,有没有办法监听导航变化?

示例:在Widget A中触发导航:

Navigator.of(context).pushNamed('/chat');

执行上述代码时,我希望在Widget A的子级中触发一个事件。 这可能吗?

使用 RouteObserver:

final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();

然后将此添加到根 materialApp 小部件:

MaterialApp(
      theme: ThemeData(),
      navigatorObservers: [routeObserver],
)

我们需要在每个可能被推送或弹出到路由堆栈的小部件中实现 RouteAware。

class Screen extends State<Screen3> with RouteAware{
...

 @override
 void didChangeDependencies() {
 super.didChangeDependencies();
 routeObserver.subscribe(this, ModalRoute.of(context));
 }

  @override
  void dispose() {
    routeObserver.unsubscribe(this);
    super.dispose();
  }

  @override
  void didPush() {
    final route = ModalRoute.of(context).settings.name;
    print('didPush route: $route');
  }

  @override
  void didPopNext() {
    final route = ModalRoute.of(context).settings.name;
    print('didPopNext route: $route');
  }

  @override
  void didPushNext() {
    final route = ModalRoute.of(context).settings.name;
    print('didPushNext route: $route');
  }

  @override
  void didPop() {
    final route = ModalRoute.of(context).settings.name;
    print('didPop route: $route');
  }
...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM