Flutter integrācija ar skaidru container īpašumtiesību.

ProviderScope var pārvaldīt container vai saņemt to no ārpuses. Consumer API saglabā WidgetRef piekļuvi saderīgu ar Riverpod stila kodu.

ProviderScope īpašumtiesības

Container īpašumtiesības maina atbrīvošanas atbildību.

Iekšējais container

ProviderScope(child: ...) automātiski atbrīvojas

Ārējais container

ProviderScope(container: c, ...) prasa, lai izsaucējs izsauc c.dispose()

Nekontrolēts scope

UncontrolledProviderScope nekad neatbrīvo container

Bieža kļūda

Widget testos atcerieties atbrīvot ārēji ievadītu ProviderContainer, lai izvairītos no atlikušiem taimeru noplūdumiem.

Consumer varianti

Visas izvēles nodrošina WidgetRef; izvēlieties pēc widget stila un lokālā stāvokļa vajadzībām.

Lietotnes sakne

Kad lietot katru

Consumer: lokāls builder bloks mazām reaktīvām zonām.
ConsumerWidget: stateless widget ar build(context, ref).
ConsumerStatefulWidget: stateful widget ar ref iekš ConsumerState.

Piemērs: ConsumerStatefulWidget

Izmantojiet ConsumerState, kad vajadzīgs gan WidgetRef, gan lokāls maināms UI stāvoklis.

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 iekšējā loģika ieplāno rebuild pēc kadra, tā samazinot setState build laikā problēmas.
WidgetRef.watch lietojiet tikai vērtībām, kurām jāizraisa rebuild.
Blakus efektus turiet ārpus build; izmantojiet callbackus un invoke/refresh metodes.

Nākamie soļi

Testēšana

Pārbaudiet container dzīves ciklu, override un asinhronos atjauninājumus unit un widget testos.

Atvērt testēšanu

API atsauce

Apskatiet ProviderScope, WidgetRef un container metožu parakstus.

Atvērt API atsauci