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

ProviderScope може володіти контейнером або отримувати його зовні. API Consumer зберігають сумісність доступу до WidgetRef із кодом у стилі Riverpod.

Володіння ProviderScope

Володіння контейнером змінює відповідальність за dispose.

Внутрішній контейнер

ProviderScope(child: ...) автоматично виконує dispose

Зовнішній контейнер

ProviderScope(container: c, ...) вимагає, щоб викликали c.dispose()

Неконтрольований scope

UncontrolledProviderScope ніколи не виконує dispose контейнера

Поширена помилка

У widget-тестах не забудьте dispose-нути ProviderContainer, інжектований ззовні, щоб уникнути витоків таймерів, що залишилися в черзі.

Варіанти Consumer

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

Корінь застосунку

Коли використовувати кожен

Consumer: локальний блок builder для невеликих реактивних областей.
ConsumerWidget: stateless widget з build(context, ref).
ConsumerStatefulWidget: stateful widget з 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 планує rebuild після фрейму, зменшуючи проблеми setState під час build.
Використовуйте WidgetRef.watch лише для значень, які мають запускати rebuild.
Тримайте побічні ефекти поза build; використовуйте callbacks та методи invoke/refresh.

Наступні кроки

Тести

Перевірте життєвий цикл контейнера, override-и та async-оновлення в unit- і widget-тестах.

Відкрити тести

Довідка API

Подивіться сигнатури ProviderScope, WidgetRef і методів контейнера.

Відкрити довідку API