Flutter integracija su aiškia konteinerio nuosavybe.

ProviderScope gali valdyti konteinerį arba gauti jį iš išorės. Consumer API išlaiko WidgetRef prieigą suderinamą su Riverpod stiliaus kodu.

ProviderScope nuosavybė

Konteinerio nuosavybė pakeičia išvalymo atsakomybę.

Vidinis konteineris

ProviderScope(child: ...) automatiškai išsivalo

Išorinis konteineris

ProviderScope(container: c, ...) reikalauja, kad c.dispose() iškviestų kvietėjas

Nekontroliuojamas scope

UncontrolledProviderScope niekada neišvalo konteinerio

Dažna klaida

Widget testuose nepamirškite išvalyti iš išorės įterpto ProviderContainer, kad išvengtumėte laukiančių laikmačių nuotėkių.

Consumer variantai

Visi variantai suteikia WidgetRef; rinkitės pagal widget stilių ir vietinės būsenos poreikius.

Programėlės šaknis

Kada naudoti kiekvieną

Consumer: vietinis builder blokas mažoms reaktyvioms sritims.
ConsumerWidget: stateless widget su build(context, ref).
ConsumerStatefulWidget: stateful widget su ref ConsumerState viduje.

Pavyzdys: ConsumerStatefulWidget

Naudokite ConsumerState, kai jums reikia ir WidgetRef, ir vietinės kintamos UI būsenos.

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),
        ),
      ],
    );
  }
}
Consumer vidinė logika planuoja rebuild'us po frame, taip sumažindama setState build metu problemas.
WidgetRef.watch naudokite tik reikšmėms, kurios turėtų sukelti rebuild'us.
Šalutinius efektus laikykite už build ribų; naudokite callback'us ir invoke/refresh metodus.

Kiti žingsniai

Testavimas

Patikrinkite konteinerio gyvavimo ciklą, override'us ir asinchroninius atnaujinimus unit ir widget testuose.

Atidaryti testavimą

API nuoroda

Peržiūrėkite ProviderScope, WidgetRef ir konteinerio metodų parašus.

Atidaryti API nuorodą