Integrace Flutteru s explicitním vlastnictvím kontejneru.

ProviderScope může vlastnit kontejner nebo jej přijmout zvenčí. Consumer API zachovávají přístup k WidgetRef kompatibilní se stylem kódu Riverpodu.

Vlastnictví ProviderScope

Vlastnictví kontejneru mění odpovědnost za dispose.

Vnitřní kontejner

ProviderScope(child: ...) se disposeuje automaticky

Vnější kontejner

ProviderScope(container: c, ...) vyžaduje, aby c.dispose() zavolal volající

Nekontrolovaný scope

UncontrolledProviderScope kontejner nikdy nedisposeuje

Častá chyba

Ve widget testech nezapomeňte disposeovat externě předaný ProviderContainer, aby nedocházelo k únikům čekajících timerů.

Varianty Consumer

Všechny možnosti zpřístupňují WidgetRef; vybírejte podle stylu widgetu a potřeb lokálního stavu.

Kořen aplikace

Kdy použít který

Consumer: lokální builder blok pro malé reaktivní oblasti.
ConsumerWidget: stateless widget s build(context, ref).
ConsumerStatefulWidget: stateful widget s ref uvnitř ConsumerState.

Příklad: ConsumerStatefulWidget

Použijte ConsumerState, když potřebujete WidgetRef i lokální měnitelný stav UI.

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),
        ),
      ],
    );
  }
}
Interní logika Consumer plánuje rebuildy až po vykreslení rámce, čímž snižuje problémy se setState během build.
WidgetRef.watch používejte jen pro hodnoty, které mají rebuild spouštět.
Vedlejší efekty nechte mimo build; používejte callbacky a metody invoke/refresh.

Další kroky

Testování

Ověřte životní cyklus kontejneru, overridey a asynchronní aktualizace v unit a widget testech.

Otevřít Testing

API Reference

Podívejte se na signatury ProviderScope, WidgetRef a metod kontejneru.

Otevřít API Reference