Flutter back navigation doesnt trigger RouteAware didPop()

Viewed 605

My goal is to track routes being presented and dismissed for analytics purposes like described on this article: https://medium.com/flutter-community/how-to-track-screen-transitions-in-flutter-with-routeobserver-733984a90dea

I am pushing a CupertinoPageRoute and passing a Widget to it that implements the RouteAware Mixin.

final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
return CupertinoApp(
    ...
    navigatorObservers: [routeObserver],
}

Pushing like so:

Navigator.of(context).push(
  CupertinoPageRoute(builder: (context) => MyWidget()),
);

The Widget

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'),
          ),
        ],
      ),
    );
  }
}

The didPop() method is never called when popping a CupertinoPageRoute with the back button unless I push with rootNavigator = true which is not what I want.

How can I fix this?

EDIT: This behavior only happens when pushing routes from a CupertinoTabView, as it creates a new nested navigator.

Github Issue

0 Answers
Related