Did you know?

If your app uses GoRouter with shell routes, tracking screen views reliably requires some workarounds.

Here’s how I do it (using Riverpod):

  1. Declare GoRouter inside a Riverpod provider
  2. Create a stateful GoRouter listener to track screen views
  3. Return it inside MaterialApp.builder
GoRouter Delegate Listener for Screen Tracking

Here’s a PR showing how I implemented this in my Time Tracker app:

And here’s the original GoRouter issue showing that NavigatorObserver doesn’t work with shell routes:

Happy coding!