Flutter-Integration mit explizitem Container-Eigentum.
ProviderScope kann einen Container besitzen oder einen externen erhalten. Consumer-APIs halten den Zugriff auf WidgetRef mit Riverpod-ähnlichem Code kompatibel.
ProviderScope-Eigentum
Das Container-Eigentum ändert die Verantwortung für dispose.
Interner Container
ProviderScope(child: ...) führt automatisch dispose aus
Externer Container
ProviderScope(container: c, ...) erfordert, dass c.dispose() vom Aufrufer ausgeführt wird
Unkontrollierter Scope
UncontrolledProviderScope führt den dispose des Containers niemals aus
Häufige Falle
Denken Sie in Widget-Tests daran, einen extern injizierten ProviderContainer zu dispose, um ausstehende Timer-Leaks zu vermeiden.
Consumer-Varianten
Alle Optionen stellen WidgetRef bereit; wählen Sie nach Widget-Stil und Anforderungen an den lokalen State.
App-Stamm
Wann welche Variante verwenden
Consumer: lokaler Builder-Block für kleine reaktive Bereiche.
ConsumerWidget: stateless widget mit build(context, ref).
ConsumerStatefulWidget: stateful widget mit ref innerhalb von ConsumerState.
Beispiel: ConsumerStatefulWidget
Verwenden Sie ConsumerState, wenn Sie sowohl WidgetRef als auch einen lokalen veränderbaren UI-State benötigen.
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),
),
],
);
}
}
Nächste Schritte
Tests
Validieren Sie Container-Lebenszyklus, Overrides und asynchrone Updates in Unit- und Widget-Tests.
Testing öffnenAPI-Referenz
Sehen Sie sich die Signaturen für ProviderScope, WidgetRef und Container-Methoden an.
API-Referenz öffnen