mirror of
https://github.com/lucavenir/go_router_riverpod.git
synced 2025-08-06 14:59:53 +08:00
38 lines
1.3 KiB
Markdown
38 lines
1.3 KiB
Markdown
# value_notifier
|
|
|
|
[WARN: LEGACY CODE]
|
|
This example uses a `ValueNotifier` as a `Listenable` object inside our Router definition.
|
|
**Dependencies**:
|
|
- GoRouter v4
|
|
- Riverpod v1
|
|
|
|
## Is this approach advised?
|
|
It turns out this approach isn't very "scalable" and it's not clean.
|
|
|
|
### Short explanation
|
|
In this example we build a `Listenable` object through `ValueNotifier`, which - in the end - is just a `ChangeNotifier` that internally calls `notifyListeners` when such value changes; this allows us to implement our custom logic and make the router react to external changes
|
|
|
|
This implementation has low readability: it's discouraged to introduce code that works because of side effects.
|
|
|
|
**Side effects? What?**
|
|
|
|
Here, ValueNotifier exposes a _useless_ value (no one is actually reading or using it); furthermore, we are forced to write onto the listenable to trigger rebuilds.
|
|
Shortly, this is a workaround, which doesn't makes much sense when other options are available
|
|
|
|
_Simply put - this is not clean code - this works because of side effects._
|
|
|
|
## 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!
|