Інтэграцыя Flutter з выразным валоданнем кантэйнерам.

ProviderScope можа валодаць кантэйнерам або атрымліваць яго звонку. Consumer API захоўваюць доступ да WidgetRef сумяшчальным са стылем кода Riverpod.

Валоданне ProviderScope

Валоданне кантэйнерам змяняе адказнасць за dispose.

Унутраны кантэйнер

ProviderScope(child: ...) аўтаматычна выконвае dispose

Знешні кантэйнер

ProviderScope(container: c, ...) патрабуе, каб c.dispose() выклікаў карыстальнік

Неўладкаваны scope

UncontrolledProviderScope ніколі не выконвае dispose кантэйнера

Частая памылка

У widget-тэстах не забудзьцеся выконваць dispose для ProviderContainer, які быў перададзены звонку, каб пазбегнуць чаканых уцечак таймераў.

Варыянты Consumer

Усе варыянты адкрываюць WidgetRef; выбірайце паводле стылю віджэта і патрэб лакальнага стану.

Карані праграмы

Калі выкарыстоўваць кожны

Consumer: лакальны блок builder для невялікіх рэактыўных участкаў.
ConsumerWidget: stateless-vidžэт з build(context, ref).
ConsumerStatefulWidget: stateful-vidžэт з ref унутры ConsumerState.

Прыклад: ConsumerStatefulWidget

Выкарыстоўвайце ConsumerState, калі вам патрэбныя і WidgetRef, і лакальны зменлівы 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),
        ),
      ],
    );
  }
}
Унутраная логіка Consumer плануе перабудовы на post-frame, што памяншае праблемы setState падчас build.
Выкарыстоўвайце WidgetRef.watch толькі для значэнняў, якія павінны запускаць перабудовы.
Трымайце пабочныя эфекты па-за build; выкарыстоўвайце callback-і і метады invoke/refresh.

Наступныя крокі

Тэставанне

Праверце жыццёвы цыкл кантэйнера, override-ы і асінхронныя абнаўленні ў unit- і widget-тэстах.

Адкрыць Testing

API-даведнік

Паглядзіце подпісы ProviderScope, WidgetRef і метадаў кантэйнера.

Адкрыць API Reference