Integrazione Flutter con proprietà esplicita del container.

ProviderScope può possedere un container o riceverne uno dall'esterno. Le API Consumer mantengono l'accesso a WidgetRef compatibile con codice in stile Riverpod.

Proprietà di ProviderScope

La proprietà del container cambia la responsabilità del dispose.

Container interno

ProviderScope(child: ...) viene dispose automaticamente

Container esterno

ProviderScope(container: c, ...) richiede che c.dispose() venga chiamato dal chiamante

Scope non controllato

UncontrolledProviderScope non dispose mai il container

Errore comune

Nei widget test, ricordati di disporre del ProviderContainer iniettato dall'esterno per evitare perdite di timer in sospeso.

Varianti di Consumer

Tutte le opzioni espongono WidgetRef; scegli in base allo stile del widget e ai bisogni dello stato locale.

Radice dell'app

Quando usare ciascuno

Consumer: blocco builder locale per piccole aree reattive.
ConsumerWidget: widget stateless con build(context, ref).
ConsumerStatefulWidget: widget stateful con ref all'interno di ConsumerState.

Esempio: ConsumerStatefulWidget

Usa ConsumerState quando ti servono sia WidgetRef sia uno stato UI locale e mutabile.

class HomePage extends ConsumerStatefulWidget {
  const HomePage({super.key});

  @override
  ConsumerState<HomePage> createState() => _HomePageState();
}

class _HomePageState extends ConsumerState<HomePage> {
  bool expanded = false;

  @override
  Widget build(BuildContext context) {
    final user = ref.watch(currentUser);
    return Column(
      children: [
        Text('$user'),
        Switch(
          value: expanded,
          onChanged: (v) => setState(() => expanded = v),
        ),
      ],
    );
  }
}
Il funzionamento interno di Consumer pianifica i rebuild al post-frame, riducendo i problemi di setState durante il build.
Usa WidgetRef.watch solo per i valori che devono attivare rebuild.
Mantieni gli side effect fuori da build; usa callback e i metodi invoke/refresh.

Prossimi passi

Test

Valida il lifecycle del container, gli override e gli aggiornamenti asincroni nei test unitari e nei widget test.

Apri i test

Riferimento API

Vedi le signature di ProviderScope, WidgetRef e dei metodi del container.

Apri il riferimento API