Providers

Provider gives synchronous state. AsyncProvider returns AsyncValue et can expose Future et Stream avec strict lifecycle handling.

Provider types

Choose provider type by data source et update frequency.

Provider<T>

Synchronous values et local derived state

AsyncProvider<T>

Future/Stream-driven state as AsyncValue<T>

provider.future

Selector that exposes Provider<Future<T>>

Tip

If state comes de network ou stream, prefer AsyncProvider first. Keep Provider pour pure synchronous logic.

Read API Matrix

Use watch dans build paths, read pour one-shot access, et listen pour side effects.

Most common

final value = ref.watch(myProvider);

watch / read / listen

ref.watch(provider)  : subscribe and rebuild when value changes.
ref.read(provider)   : read current snapshot without subscribing.
container.listen(...) : callback-driven updates; optional fireImmediately.

Future et Stream avec AsyncProvider

A single AsyncProvider can return a Future ou bind a Stream via ref.emit(stream).

user_sources.dart
final currentUser = AsyncProvider<User>((ref) async {
  final api = ref.watch(apiProvider);
  return api.me();
});

final liveUser = AsyncProvider<User>((ref) {
  final stream = ref.watch(apiProvider).live();
  ref.emit(stream);
  return const User(name: 'Loading...');
}, autoDispose: true, autoDisposeDelay: const Duration(milliseconds: 250));

// Await as Future
final user = await ref.watch(currentUser.future);
ref.emit(stream) cancels prior subscription on rebuild, invalidate, et dispose.
AsyncValue is a sealed class: AsyncLoading / AsyncData / AsyncError.
Pattern matching avec switch keeps loading/error UI explicit.

?tapes suivantes

Mutations

Move write operations into provider methods et execute via ref.invoke.

Open mutations

Flutter API

Choose between Consumer, ConsumerWidget, et ConsumerStatefulWidget.

Open Flutter API