Flutter-integraatio eksplisiittisellä containerin omistajuudella.

ProviderScope voi omistaa containerin tai vastaanottaa sen ulkopuolelta. Consumer-API:t pitävät WidgetRef-pääsyn yhteensopivana Riverpod-tyylisen koodin kanssa.

ProviderScope-omistajuus

Containerin omistajuus muuttaa dispose-vastuun.

Sisäinen container

ProviderScope(child: ...) disposetaan automaattisesti

Ulkoinen container

ProviderScope(container: c, ...) vaatii, että kutsuja kutsuu c.dispose()-metodia

Hallinnoimaton scope

UncontrolledProviderScope ei koskaan disposea containeria

Yleinen sudenkuoppa

Widget-testeissä muista disposeata ulkoisesti injektoitu ProviderContainer, jotta vältyt odottavien ajastimien vuodoilta.

Consumer-muunnelmat

Kaikki vaihtoehdot tarjoavat WidgetRefin; valitse widget-tyylin ja paikallisen tilan tarpeiden mukaan.

Sovelluksen juuri

Milloin kutakin käytetään

Consumer: paikallinen rakentajablokki pienille reaktiivisille alueille.
ConsumerWidget: tilaton widget, jonka build(context, ref).
ConsumerStatefulWidget: tilallinen widget, jossa ref on ConsumerStatessa.

Esimerkki: ConsumerStatefulWidget

Käytä ConsumerStatea, kun tarvitset sekä WidgetRefin että paikallisen, muutettavan UI-tilan.

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),
        ),
      ],
    );
  }
}
Consumerin sisäinen toiminta ajoittaa uudelleenrakennukset post-frame-vaiheeseen, mikä vähentää setState buildin aikana -ongelmia.
Käytä WidgetRef.watchia vain arvoille, joiden pitäisi käynnistää uudelleenrakennus.
Pidä sivuvaikutukset poissa buildista; käytä callbackeja ja invoke/refresh-menetelmiä.

Seuraavat askeleet

Testaus

Varmista containerin elinkaari, yliajot ja asynkroniset päivitykset yksikkö- ja widget-testeissä.

Avaa testit

API-viite

Katso ProviderScope-, WidgetRef- ja container-metodien allekirjoitukset.

Avaa API-viite