autoDispose constant
Marks the provider as automatically disposed when no longer listened to.
Some typical use-cases:
- Combined with StreamProvider, this can be used as a mean to keep the connection with Firebase alive only when truly needed (to reduce costs).
- Automatically reset a form state when leaving the screen.
- Automatically retry HTTP requests that failed when the user exit and re-enter the screen.
- Cancel HTTP requests if the user leaves a screen before the request completed.
Marking a provider with autoDispose
also adds an extra method on ref
: keepAlive
.
The keepAlive
function is used to tell Riverpod that the state of the provider
should be preserved even if no longer listened to.
A use-case would be to set this flag to true
after an HTTP request have
completed:
final myProvider = FutureProvider.autoDispose((ref) async {
final response = await httpClient.get(...);
ref.keepAlive();
return response;
});
This way, if the request failed and the UI leaves the screen then re-enters it, then the request will be performed again. But if the request completed successfully, the state will be preserved and re-entering the screen will not trigger a new request.
It can be combined with ref.onDispose
for more advanced behaviors, such
as cancelling pending HTTP requests when the user leaves a screen.
For example, modifying our previous snippet and using dio
, we would have:
final myProvider = FutureProvider.autoDispose((ref) async {
+ final cancelToken = CancelToken();
+ ref.onDispose(() => cancelToken.cancel());
+ final response = await dio.get('path', cancelToken: cancelToken);
- final response = await dio.get('path');
ref.keepAlive();
return response;
});
Implementation
static const autoDispose = AutoDisposeStateProviderBuilder();