rrousselGit / riverpod
- суббота, 5 августа 2023 г. в 00:00:14
A simple way to access state while robust and testable.
A state-management library that:
riverpod | |
---|---|
flutter_riverpod | |
hooks_riverpod |
Welcome to Riverpod!
This project can be considered as a rewrite of provider to make improvements that would be otherwise impossible.
For learning how to use Riverpod, see its documentation: https://riverpod.dev
Long story short:
Declare your providers as global variables:
final counterProvider = StateNotifierProvider((ref) {
return Counter();
});
class Counter extends StateNotifier<int> {
Counter(): super(0);
void increment() => state++;
}
Use them inside your widgets in a compile time safe way. No runtime exceptions!
class Example extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(counterProvider);
return Text(count.toString());
}
}
See the FAQ if you have questions about what this means for provider.
With the release of version 1.0.0, the syntax for interacting with providers changed.
See the migration guide for more information
If provider is a simplification of InheritedWidgets, then Riverpod is a reimplementation of InheritedWidgets from scratch.
It is very similar to provider in principle, but also has major differences as an attempt to fix the common problems that provider face.
Riverpod has multiple goals. First, it inherits the goals of provider:
From there, Riverpod goes a few steps beyond:
These are achieved by no longer using InheritedWidgets. Instead, Riverpod implements its own mechanism that works in a similar fashion.
For learning how to use Riverpod, see its documentation: https://riverpod.dev
Contributions are welcomed!
Here is a curated list of how you can help:
While provider is largely used and well accepted by the community, it is not perfect either.
People regularly file issues or ask questions about some problems they face, such as:
ProviderNotFoundException
?These are legitimate problems, and I believe that something can be improved to fix those.
The issue is, these problems are deeply rooted in how provider works, and fixing those problems is likely impossible without drastic changes to the mechanism of provider.
In a way, if provider is a candle then Riverpod is a lightbulb. They have very similar usages, but we cannot create a lightbulb by improving our candle.
Yes.
Riverpod is stable and actively maintained.
It is possible. Some experiments are being made that could make this doable. But their outcome isn't clear yet. (no link to an issue to avoid putting unnecessary pressure on the people involved)
If those experiments are successful (although unlikely), then Provider and Riverpod could be fused.
Maybe.
Provider has numerous flaws that can't quite be fixed. At the same time,
Riverpod has proven to fix many of those.
As such, deprecating Provider is being considered.
The only inconvenience of Riverpod is the need for a "Consumer", which Provider doesn't need. But some alternatives are being investigated to maybe remove this constraint.
Whatever the decision is, a migration tool is planned to help assist migration from provider to Riverpod. Along with whatever other tool necessary to help.