Integracija Flutter z izrecnim lastništvom vsebnika.

ProviderScope lahko lastniško upravlja vsebnik ali ga prejme od zunaj. API-ji Consumer ohranjajo dostop do WidgetRef združljiv s kodo v slogu Riverpod.

Lastništvo ProviderScope

Lastništvo vsebnika spremeni odgovornost za sprostitev.

Notranji vsebnik

ProviderScope(child: ...) se samodejno sprosti

Zunanji vsebnik

ProviderScope(container: c, ...) zahteva, da c.dispose() pokliče klicatelj

Nenadzorovan obseg

UncontrolledProviderScope vsebnika nikoli ne sprosti

Pogosta past

V widget testih ne pozabite sprostiti ProviderContainer, vstavljenega od zunaj, da se izognete morebitnim uhajanjem časovnikov.

Različice Consumer

Vse možnosti izpostavljajo WidgetRef; izberite glede na slog gradnika in potrebe lokalnega stanja.

Koren aplikacije

Kdaj uporabiti katerega

Consumer: local builder block for small reactive areas.
ConsumerWidget: stateless widget with build(context, ref).
ConsumerStatefulWidget: stateful widget with ref inside ConsumerState.

Primer: ConsumerStatefulWidget

ConsumerState uporabite, ko potrebujete tako WidgetRef kot lokalno spremenljivo stanje 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),
        ),
      ],
    );
  }
}
Notranjost Consumerja razporeja ponovne izgradnje po okvirju, kar zmanjšuje težave s setState med gradnjo.
WidgetRef.watch uporabljajte samo za vrednosti, ki naj sprožijo ponovno izgradnjo.
Stranske učinke pustite zunaj builda; uporabljajte povratne klice ter metode invoke/refresh.

Naslednji koraki

Testiranje

Preverite življenjski cikel vsebnika, prepisovanja in asinhrone posodobitve v enotskih in widget testih.

Odpri testiranje

Referenca API

Oglejte si podpise za ProviderScope, WidgetRef in metode vsebnika.

Odpri referenco API