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!