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),
        ),
      ],
    );
  }
}
Consumer-komponentens interna logik schemalägger ombyggnader efter ramen, vilket minskar problem med setState under build.
Använd WidgetRef.watch endast för värden som ska trigga ombyggnader.
Håll sidoeffekter utanför build; använd callbacks samt invoke/refresh-metoder.

Nästa steg

Testning

Verifiera container-livscykel, overrides och asynkrona uppdateringar i enhets- och widgettester.

Öppna testning

API-referens

Se signaturer för ProviderScope, WidgetRef och container-metoder.

Öppna API-referensen