颤动| 如何监听导航事件?

Vin*_*oft 7 flutter

在Flutter中,有什么方法可以监听导航的变化吗?

示例:导航在以下位置触发Widget A

Navigator.of(context).pushNamed('/chat');
Run Code Online (Sandbox Code Playgroud)

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

Moj*_*asi 9

使用路由观察器:

final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
Run Code Online (Sandbox Code Playgroud)

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

MaterialApp(
      theme: ThemeData(),
      navigatorObservers: [routeObserver],
)
Run Code Online (Sandbox Code Playgroud)

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

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

 @override
 void didChangeDependencies() {
   super.didChangeDependencies();
   routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute<dynamic>);
 }

  @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');
  }
...
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您的回答。我需要进行这些更改: ```routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute&lt;dynamic&gt;);``` 和 ```最终路由 = ModalRoute.of(context)?.settings.name ;```` (4认同)