Flutter 返回导航不会触发 RouteAware didPop()

Sca*_*aux 6 dart flutter

我的目标是跟踪出于分析目的而呈现和关闭的路线,如本文所述:https : //medium.com/flutter-community/how-to-track-screen-transitions-in-flutter-with-routeobserver-733984a90dea

我正在推送 aCupertinoPageRoute并向它传递一个实现RouteAwareMixin的小部件。

final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
return CupertinoApp(
    ...
    navigatorObservers: [routeObserver],
}
Run Code Online (Sandbox Code Playgroud)

像这样推:

Navigator.of(context).push(
  CupertinoPageRoute(builder: (context) => MyWidget()),
);
Run Code Online (Sandbox Code Playgroud)

小部件

class MyWidget extends StatefulWidget {
  MyWidget({Key key}) : super(key: key);

  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> with RouteAware {
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    routeObserver.subscribe(this, ModalRoute.of(context));
  }

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

  @override
  void didPop() {
    print('never called');
  }

  @override
  void didPopNext() {
    print('never called');
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: [
          CupertinoNavigationBar(
            middle: Text('42'),
          ),
        ],
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

使用后退按钮didPop()弹出 a 时CupertinoPageRoute,永远不会调用该方法,除非我按下rootNavigator = true这不是我想要的。

我怎样才能解决这个问题?

编辑:此行为仅在从 CupertinoTabView 推送路由时发生,因为它创建了一个新的嵌套导航器。

Github 问题

Ber*_*Ber 0

如果我理解正确的话,Medium 文章中显示的最终解决方案不会扩展 every StatefulWidgetwith RouteAware。相反,它扩展了自己的实现,RouteObserver以获取有关每次路由更改的通知。

使用这种方法,您应该能够将自定义插入RouteObserver到您的主应用程序以及您的应用程序中CupertinoTabView以实现您的需要。