Percorsi di lettura: watch, read e listen.

Provider fornisce stato sincrono. AsyncProvider restituisce AsyncValue e può esporre Future e Stream con gestione rigorosa del ciclo di vita.

Tipi di provider

Scegli il tipo di provider in base alla fonte dei dati e alla frequenza di aggiornamento.

Provider<T>

Valori sincroni e stato derivato localmente

AsyncProvider<T>

Stato guidato da Future/Stream come AsyncValue<T>

provider.future

Selettore che espone Provider<Future<T>>

Suggerimento

Se lo stato proviene da rete o stream, preferisci prima AsyncProvider. Mantieni Provider per la logica sincrona pura.

Matrice dell'API di lettura

Usa watch nei percorsi di build, read per accesso una tantum e listen per effetti collaterali.

Più comune

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 con AsyncProvider

Un singolo AsyncProvider può restituire una Future o collegare uno Stream tramite 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) annulla la sottoscrizione precedente su rebuild, invalidate e dispose.
AsyncValue è una sealed class: AsyncLoading / AsyncData / AsyncError.
Il pattern matching con switch mantiene esplicita la UI di caricamento/errore.

Prossimi passi

Mutations

Sposta le operazioni di scrittura nei metodi del provider ed eseguili tramite ref.invoke.

Apri Flutter API

Flutter API

Scegli tra Consumer, ConsumerWidget e ConsumerStatefulWidget.

Apri API Reference