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),
),
],
);
}
}
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ą