Integrácia Flutter s explicitným vlastníctvom kontajnera.

ProviderScope môže vlastniť kontajner alebo ho môže prijať zvonka. API Consumer zachovávajú prístup k WidgetRef kompatibilný s kódom v štýle Riverpod.

Vlastníctvo ProviderScope

Vlastníctvo kontajnera mení zodpovednosť za uvoľnenie.

Interný kontajner

ProviderScope(child: ...) sa automaticky uvoľní

Externý kontajner

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

Neriadený scope

UncontrolledProviderScope nikdy kontajner neuvoľní

Častá chyba

V widget testoch nezabudnite uvoľniť externe vložený ProviderContainer, aby ste predišli únikom čakajúcich časovačov.

Varianty Consumer

Všetky možnosti vystavujú WidgetRef; vyberte si podľa štýlu widgetu a potrieb lokálneho stavu.

Koreň aplikácie

Kedy použiť jednotlivé možnosti

Consumer: local builder block for small reactive areas.
ConsumerWidget: stateless widget with build(context, ref).
ConsumerStatefulWidget: stateful widget with ref inside ConsumerState.

Príklad: ConsumerStatefulWidget

Použite ConsumerState, keď potrebujete WidgetRef aj lokálny meniteľný 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é fungovanie Consumer plánuje opätovné zostavenia až po frame, čím znižuje problémy so setState počas build-u.
WidgetRef.watch používajte iba pre hodnoty, ktoré majú spúšťať opätovné zostavenie.
Vedľajšie efekty nechajte mimo build-u; používajte callbacky a metódy invoke/refresh.

Ďalšie kroky

Testovanie

Overte životný cyklus kontajnera, prepísania a asynchrónne aktualizácie v unit a widget testoch.

Otvoriť testovanie

Referencia API

Pozrite si signatúry pre ProviderScope, WidgetRef a metódy kontajnera.

Otvoriť referenciu API