flutter:监听路由的变化

问题

当从路由B页面返回路由A页面后,A页面需要进行数据刷新。因此需要监听路由变化

解决

使用RouteObserver进行录音监听

创建全局变量,不在任何类中

dart 复制代码
final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();

在main.dart中添加监听

dart 复制代码
Widget build(BuildContext context) {
  return MaterialApp(
    ...
    navigatorObservers: <NavigatorObserver>[routeObserver],
    ...
  );
}

订阅观察者

dart 复制代码
class _MyPageWidgetState extends State<MyPageWidget> with RouteAware {
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
     // 订阅路由变化
    final ModalRoute? modalRoute = ModalRoute.of(context);
    if (modalRoute is PageRoute) {
      routeObserver.subscribe(this, modalRoute);
    }
  }

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

  void didPopNext() {
    debugPrint('路由回来了');
  }
}

当从其他路由页面返回MyPageWidget页面时会触发didPopNext方法,可以在该方法里执行查询等操作