Integracja Flutter z jawnie określoną własnością kontenera.
ProviderScope może posiadać kontener lub otrzymać go z zewnątrz. API Consumer utrzymują zgodność dostępu do WidgetRef z kodem w stylu Riverpod.
Własność ProviderScope
Własność kontenera zmienia odpowiedzialność za zwalnianie zasobów.
Kontener wewnętrzny
ProviderScope(child: ...) zwalnia się automatycznie
Kontener zewnętrzny
ProviderScope(container: c, ...) wymaga wywołania c.dispose() przez wywołującego
Scope niekontrolowany
UncontrolledProviderScope nigdy nie zwalnia kontenera
Częsta pułapka
W testach widgetów pamiętaj, aby zwolnić ProviderContainer wstrzyknięty z zewnątrz, żeby uniknąć wycieków oczekujących timerów.
Warianty Consumer
Wszystkie opcje udostępniają WidgetRef; wybierz zgodnie ze stylem widżetu i potrzebami lokalnego stanu.
Katalog główny aplikacji
Kiedy używać poszczególnych
Consumer: lokalny blok buildera dla małych obszarów reaktywnych.
ConsumerWidget: bezstanowy widget z build(context, ref).
ConsumerStatefulWidget: stanowy widget z ref wewnątrz ConsumerState.
Przykład: ConsumerStatefulWidget
Użyj ConsumerState, gdy potrzebujesz zarówno WidgetRef, jak i lokalnego, zmiennego stanu 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),
),
],
);
}
}
Następne kroki
Testowanie
Sprawdź cykl życia kontenera, nadpisania i aktualizacje async w testach jednostkowych i widgetowych.
Otwórz testyDokumentacja API
Zobacz sygnatury dla ProviderScope, WidgetRef i metod kontenera.
Otwórz dokumentację API