Integracja Flutter z jawnie określoną własnością kontenera.

ProviderScope może posiadać kontener lub otrzymać go z zewnątrz. API Consumer utrzymują zgodność dostępu do WidgetRef z kodem w stylu Riverpod.

Własność ProviderScope

Własność kontenera zmienia odpowiedzialność za zwalnianie zasobów.

Kontener wewnętrzny

ProviderScope(child: ...) zwalnia się automatycznie

Kontener zewnętrzny

ProviderScope(container: c, ...) wymaga wywołania c.dispose() przez wywołującego

Scope niekontrolowany

UncontrolledProviderScope nigdy nie zwalnia kontenera

Częsta pułapka

W testach widgetów pamiętaj, aby zwolnić ProviderContainer wstrzyknięty z zewnątrz, żeby uniknąć wycieków oczekujących timerów.

Warianty Consumer

Wszystkie opcje udostępniają WidgetRef; wybierz zgodnie ze stylem widżetu i potrzebami lokalnego stanu.

Katalog główny aplikacji

Kiedy używać poszczególnych

Consumer: lokalny blok buildera dla małych obszarów reaktywnych.
ConsumerWidget: bezstanowy widget z build(context, ref).
ConsumerStatefulWidget: stanowy widget z ref wewnątrz ConsumerState.

Przykład: ConsumerStatefulWidget

Użyj ConsumerState, gdy potrzebujesz zarówno WidgetRef, jak i lokalnego, zmiennego stanu 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),
        ),
      ],
    );
  }
}
Wewnętrzna logika Consumer planuje przebudowy po ramce, co zmniejsza problemy z setState podczas budowania.
Używaj WidgetRef.watch tylko dla wartości, które powinny wywoływać przebudowę.
Trzymaj efekty uboczne poza build; używaj callbacków oraz metod invoke/refresh.

Następne kroki

Testowanie

Sprawdź cykl życia kontenera, nadpisania i aktualizacje async w testach jednostkowych i widgetowych.

Otwórz testy

Dokumentacja API

Zobacz sygnatury dla ProviderScope, WidgetRef i metod kontenera.

Otwórz dokumentację API