Caminhos de leitura: watch, read e listen.

Provider fornece estado síncrono. AsyncProvider retorna AsyncValue e pode expor Future e Stream com tratamento estrito de ciclo de vida.

Tipos de provider

Escolha o tipo de provider pela fonte de dados e frequência de atualização.

Provider<T>

Valores síncronos e estado derivado local

AsyncProvider<T>

Estado guiado por Future/Stream como AsyncValue<T>

provider.future

Seletor que expõe Provider<Future<T>>

Dica

Se o estado vier da rede ou de stream, prefira primeiro AsyncProvider. Mantenha Provider para lógica síncrona pura.

Matriz da API de leitura

Use watch em caminhos de build, read para acesso único e listen para efeitos colaterais.

Mais comum

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 e Stream com AsyncProvider

Um único AsyncProvider pode retornar uma Future ou vincular um Stream via ref.emit(stream).

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) cancela a assinatura anterior em rebuild, invalidate e dispose.
AsyncValue é uma sealed class: AsyncLoading / AsyncData / AsyncError.
Pattern matching com switch mantém a UI de carregamento/erro explícita.

Próximos passos

Mutations

Mova operações de escrita para métodos de provider e execute-as via ref.invoke.

Abrir Flutter API

Flutter API

Escolha entre Consumer, ConsumerWidget e ConsumerStatefulWidget.

Abrir API Reference