Flutter | 如何监听导航事件?

6
在Flutter中,有没有监听导航变化的方法?
例如:在Widget A中触发了导航:
Navigator.of(context).pushNamed('/chat');

当执行上述代码时,我希望在Widget A的子元素中触发一个事件。这是否可能?
1个回答

8
使用 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');
  }
...
}

3
谢谢您的回答。 我需要进行以下更改: routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute<dynamic>);final route = ModalRoute.of(context)?.settings.name; - Sina Seirafi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接