Flutteri integratsioon selge konteineri omandiga.
ProviderScope võib omada konteinerit või saada selle väliselt. Consumer API-d hoiavad WidgetRef'i ligipääsu Riverpodi-laadse koodiga ühilduvana.
ProviderScope'i omandus
Konteineri omandiõigus muudab dispose'i vastutust.
Sisemine konteiner
ProviderScope(child: ...) teeb dispose'i automaatselt
Väline konteiner
ProviderScope(container: c, ...) nõuab, et c.dispose() kutsuks välja kasutaja
Kontrollimata scope
UncontrolledProviderScope ei tee kunagi konteineri dispose'i
Tavaline lõks
Vidinates ehiatustes ära unusta välimiselt süstitud ProviderContainer'i dispose'ida, et vältida ootel taimerite lekkeid.
Consumeri variandid
Kõik variandid paljastavad WidgetRef'i; vali vidina stiili ja kohaliku state'i vajaduste järgi.
Rakenduse juur
Millal kumbagi kasutada
Consumer: kohalik builder-plokk väikeste reaktiivsete alade jaoks.
ConsumerWidget: state-vaba vidin build(context, ref)-ga.
ConsumerStatefulWidget: stateful vidin ref-iga ConsumerState sees.
Näide: ConsumerStatefulWidget
Kasuta ConsumerState'i, kui vajad nii WidgetRef'i kui ka kohalikku muudetavat UI-state'i.
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),
),
],
);
}
}
Järgmised sammud
Testimine
Kontrolli konteineri elutsüklit, override'e ja asünkroonseid uuendusi ühik- ja vidinatestides.
Ava Testing