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),
        ),
      ],
    );
  }
}
Die interne Logik von Consumer plant Rebuilds erst nach dem Frame ein, wodurch Probleme mit setState während des Builds reduziert werden.
Verwenden Sie WidgetRef.watch nur für Werte, die Rebuilds auslösen sollen.
Halten Sie Seiteneffekte außerhalb von build; verwenden Sie Callbacks sowie invoke/refresh-Methoden.

Nächste Schritte

Tests

Validieren Sie Container-Lebenszyklus, Overrides und asynchrone Updates in Unit- und Widget-Tests.

Testing öffnen

API-Referenz

Sehen Sie sich die Signaturen für ProviderScope, WidgetRef und Container-Methoden an.

API-Referenz öffnen