Flutter-integration med eksplicit ejerskab af containeren.
ProviderScope kan eje en container eller modtage en udefra. Consumer-API'er holder WidgetRef-adgang kompatibel med Riverpod-lignende kode.
Ejerskab af ProviderScope
Ejerskab af containeren ændrer ansvaret for disposal.
Intern container
ProviderScope(child: ...) disposer automatisk
Ekstern container
ProviderScope(container: c, ...) kræver, at c.dispose() kaldes af den, der bruger den
Ukontrolleret scope
UncontrolledProviderScope disposer aldrig containeren
Typisk faldgrube
I widget-tests skal du huske at dispose en ekstern ProviderContainer for at undgå ventende timer-lækager.
Consumer-varianter
Alle muligheder eksponerer WidgetRef; vælg efter widget-stil og behov for lokal state.
App-rod
Hvornår hver skal bruges
Consumer: lokal builder-blok til små reaktive områder.
ConsumerWidget: statsløs widget med build(context, ref).
ConsumerStatefulWidget: stateful widget med ref inde i ConsumerState.
Eksempel: ConsumerStatefulWidget
Brug ConsumerState, når du har brug for både WidgetRef og lokal, muterbar UI-state.
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),
),
],
);
}
}
Næste skridt
Test
Valider container-livscyklus, overrides og asynkrone opdateringer i enheds- og widget-tests.
Åbn Testing