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),
),
],
);
}
}
Prossimi passi
Test
Valida il lifecycle del container, gli override e gli aggiornamenti asincroni nei test unitari e nei widget test.
Apri i testRiferimento API
Vedi le signature di ProviderScope, WidgetRef e dei metodi del container.
Apri il riferimento API