Files

refresh_stream

[WARN: LEGACY CODE] Since GoRouer v5, GoRouterRefreshStream is removed from the API. This example is here just to give a workaround for legacy code bases: this example makes the transition towards v5 smooth; it re-creates GoRouterRefreshStream as a Listenable object inside our Router definition.

Dependencies:

  • GoRouter v5
  • Riverpod v1

Is this approach advised?

DO NOT USE THIS APPROACH IF POSSIBLE. This is just for migration purposes. Also, Riverpod exists to avoid handling streams, so...

Short explanation

If you're still here, then here's a refresher. In GoRouter <\v4, refreshListenable accepted a RefreshStream, and it allowed the user to define a GoRouterRefreshStream, for simple Stream implementations.

Nowadays, GoRouter >v5 doesn't expose a GoRouterRefreshStream class anymore. The migration guide simply suggests to just reimplement that class: we can do that in a few LOC; at the end of the day, a GoRouterRefreshStream is just a ChangeNotifier with a stream subscription in it, which simply calls notifyListeners() whenever the stream gives a new value.

Why is this discouraged?

Besides the change in the API with GoRouter v5, it should be considered that, when compared to other approaches, with this implementation:

  • it is slightly harder to manage different providers states
  • it is harder to customize logic through listen
  • you don't even save some LOC (it's as verbose as ever)

Simply put - skip this example if you're not migrating code in legacy codebases

Getting started

First, read the code:

  • 'lib/main.dart' has UI elements
  • 'lib/router.dart' has the routing logic
  • 'lib/auth.dart' has the auth logic

Most of the actions are mocked, here. Then, run:

flutter test flutter run

Enjoy!