Flutter-integrering med tydligt container-ägande.
ProviderScope kan äga en container eller ta emot en utifrån. Consumer-API:erna håller WidgetRef-åtkomst kompatibel med Riverpod-liknande kod.
Ägande av ProviderScope
Container-ägandet ändrar ansvaret för frigöring.
Intern container
ProviderScope(child: ...) frigörs automatiskt
Extern container
ProviderScope(container: c, ...) kräver att anroparen kallar c.dispose()
Okontrollerat scope
UncontrolledProviderScope frigör aldrig containern
Vanlig fallgrop
I widgettester, kom ihåg att frigöra en ProviderContainer som injicerats utifrån för att undvika väntande timer-läckor.
Consumer-varianter
Alla alternativ exponerar WidgetRef; välj efter widgetstil och behov av lokalt state.
Appens rot
När varje variant ska användas
Consumer: local builder block for small reactive areas.
ConsumerWidget: stateless widget with build(context, ref).
ConsumerStatefulWidget: stateful widget with ref inside ConsumerState.
Exempel: ConsumerStatefulWidget
Använd ConsumerState när du behöver både WidgetRef och ett lokalt muterbart 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ästa steg
Testning
Verifiera container-livscykel, overrides och asynkrona uppdateringar i enhets- och widgettester.
Öppna testning