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),
),
],
);
}
}
Ďalšie kroky
Testovanie
Overte životný cyklus kontajnera, prepísania a asynchrónne aktualizácie v unit a widget testoch.
Otvoriť testovanieReferencia API
Pozrite si signatúry pre ProviderScope, WidgetRef a metódy kontajnera.
Otvoriť referenciu API