A reactive caching and data-binding framework. https://riverpod.dev Riverpod makes working with asynchronous code a breeze by:
- Handling errors/loading states by default. No need to manually catch errors
- Natively supporting advanced scenarios, such as pull-to-refresh
- Separating the logic from your UI
- Ensuring your code is testable, scalable and reusable
| riverpod | |
|---|---|
| flutter_riverpod | |
| hooks_riverpod |
Welcome to Riverpod (anagram of Provider)!
For learning how to use Riverpod, see its documentation: >>> https://riverpod.dev <<<
Long story short:
Define network requests by writing a function annotated with
@riverpod:@riverpodFuture<String> boredSuggestion(Ref ref) async { final response =await http.get( Uri.https('boredapi.com', '/api/activity'), ); final json =jsonDecode(response.body); return json['activity']!asString; }
Listen to the network request in your UI and gracefully handle loading/error states.
classHomeextendsConsumerWidget { @overrideWidgetbuild(BuildContext context, WidgetRef ref) { final boredSuggestion = ref.watch(boredSuggestionProvider); // Perform a switch-case on the result to handle loading/error statesreturnswitch (boredSuggestion) { AsyncData(:final value) =>Text('data: $value'), AsyncError(:final error) =>Text('error: $error'), _ =>constText('loading'), }; } }
Contributions are welcome!
Here is a curated list of how you can help:
- Report bugs and scenarios that are difficult to implement
- Report parts of the documentation that are unclear
- Fix typos/grammar mistakes
- Update the documentation or add examples
- Implement new features by making a pull-request
