Интегратсияи Flutter бо моликияти дақиқи контейнер.

ProviderScope метавонад контейнерро соҳиб шавад ё онро аз берун қабул кунад. API-ҳои Consumer дастрасии WidgetRef-ро бо коди услуби Riverpod мувофиқ нигоҳ медоранд.

Моликияти ProviderScope

Моликияти контейнер масъулияти бекоркуниро тағйир медиҳад.

Контейнери дохилӣ

ProviderScope(child: ...) ба таври худкор бекор мешавад

Контейнери берунӣ

ProviderScope(container: c, ...) аз ҷониби даъваткунанда c.dispose()-ро талаб мекунад

Миқёси беназорат

UncontrolledProviderScope ҳеҷ гоҳ контейнерро бекор намекунад

Мушкили маъмул

Дар санҷишҳои видҷетӣ фаромӯш накунед, ки ProviderContainer-и аз берун воридшударо бекор кунед, то ихроҷи таймерҳои дар навбатмонда пешгирӣ шавад.

Вариантҳои Consumer

Ҳамаи вариантҳо WidgetRef-ро пешниҳод мекунанд; вобаста ба услуби виджет ва ниёзҳои ҳолати маҳаллӣ интихоб кунед.

Решаи барнома

Кай кадомашро истифода бурдан лозим

Consumer: блоки маҳаллии builder барои минтақаҳои хурди реактивӣ.
ConsumerWidget: видҷети бетағйир бо build(context, ref).
ConsumerStatefulWidget: видҷети ҳолатдор бо ref дар дохили ConsumerState.

Намуна: ConsumerStatefulWidget

Ҳангоме ки ба шумо ҳам WidgetRef ва ҳам ҳолати тағйирёбандаи маҳаллии UI лозим аст, ConsumerState-ро истифода баред.

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 бозсозиро ба баъди-фрейм мегузоранд ва мушкилоти setState ҳангоми сохтмонро кам мекунанд.
WidgetRef.watch-ро танҳо барои арзишҳое истифода баред, ки бояд бозсозӣ ба вуҷуд оранд.
Таъсирҳои тарафиро аз build берун нигоҳ доред; аз callback-ҳо ва усулҳои invoke/refresh истифода баред.

Қадамҳои баъдӣ

Provider

Давраи ҳаёти контейнер, override-ҳо ва навсозиҳои асинхронро дар санҷишҳои воҳидӣ ва видҷетӣ санҷед.

Санҷишҳоро кушоед

StateProvider

Имзоҳои ProviderScope, WidgetRef ва усулҳои контейнерро бинед.

Истиноди API-ро кушоед