FutureProvider<ValueT> class final Providers

A provider that asynchronously creates a value.

FutureProvider can be considered as a combination of Provider and FutureBuilder. By using FutureProvider, the UI will be able to read the state of the future synchronously, handle the loading/error states, and rebuild when the future completes.

A common use-case for FutureProvider is to represent an asynchronous operation such as reading a file or making an HTTP request, that is then listened to by the UI.

It can then be combined with:

Usage example: reading a configuration file

FutureProvider can be a convenient way to expose a Configuration object created by reading a JSON file.

Creating the configuration would be done with your typical async/await syntax, but inside the provider. Using Flutter's asset system, this would be:

final configProvider = FutureProvider<Configuration>((ref) async {
  final content = json.decode(
    await rootBundle.loadString('assets/configurations.json'),
  ) as Map<String, Object?>;

  return Configuration.fromJson(content);
});

Then, the UI can listen to configurations like so:

Widget build(BuildContext context, WidgetRef ref) {
  AsyncValue<Configuration> config = ref.watch(configProvider);

  return config.when(
    loading: () => const CircularProgressIndicator(),
    error: (err, stack) => Text('Error: $err'),
    data: (config) {
      return Text(config.host);
    },
  );
}

This will automatically rebuild the UI when the Future completes.

As you can see, listening to a FutureProvider inside a widget returns an AsyncValue – which allows handling the error/loading states.

See also:

Constructors

FutureProvider.new(Create<FutureOr<ValueT>> _create, {String? name, Iterable<ProviderOrFamily>? dependencies, bool isAutoDispose = false, Retry? retry})
A provider that asynchronously creates a value.

Properties

argument Object?
If this provider was created with the .family modifier, argument is the variable that was used.
finalinherited
dependencies Iterable<ProviderOrFamily>?
The list of providers that this provider potentially depends on.
finalinherited
from → Family?
If this provider was created with the .family modifier, from is the .family instance.
finalinherited
future → Refreshable<Future<ValueT>>
Obtains the Future representing this provider.
no setterinherited
hashCode int
The hash code for this object.
no setterinherited
isAutoDispose bool
Whether the state associated to this provider should be disposed automatically when the provider stops being listened.
finalinherited
name String?
A custom label for providers.
finalinherited
retry → Retry?
The retry strategy to use when a provider fails.
finalinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
overrideWith(Create<FutureOr<ValueT>> create) → Override
Override the provider with a new initialization function.
inherited
overrideWithValue(AsyncValue<ValueT> value) → Override
Overrides a provider with a value, ejecting the default behavior.
inherited
selectAsync<OutT>(OutT selector(ValueT data)) → ProviderListenable<Future<OutT>>
A variant of select for asynchronous values
inherited
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Constants

autoDispose → const AutoDisposeFutureProviderBuilder
Marks the provider as automatically disposed when no longer listened to.
family → const FutureProviderFamilyBuilder
A group of providers that builds their value from an external parameter.