Интеграция Flutter с явным владением контейнером.

ProviderScope может владеть контейнером или получать его извне. API Consumer сохраняют доступ к WidgetRef, совместимый с кодом в стиле Riverpod.

Владение ProviderScope

Владение контейнером меняет ответственность за освобождение.

Внутренний контейнер

ProviderScope(child: ...) автоматически освобождается

Внешний контейнер

ProviderScope(container: c, ...) требует вызова c.dispose() от вызывающего

Неуправляемая область

UncontrolledProviderScope никогда не освобождает контейнер

Частая ошибка

В widget-тестах не забудьте освободить ProviderContainer, внедрённый извне, чтобы избежать утечек ожидающих таймеров.

Варианты Consumer

Все варианты предоставляют WidgetRef; выбирайте по стилю виджета и требованиям к локальному состоянию.

Корень приложения

Когда использовать каждый

Consumer: local builder block for small reactive areas.
ConsumerWidget: stateless widget with build(context, ref).
ConsumerStatefulWidget: stateful widget with ref inside 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 планирует перестройки после кадра, уменьшая проблемы setState во время build.
Используйте WidgetRef.watch только для значений, которые должны запускать перестройки.
Держите побочные эффекты вне build; используйте callback-и и методы invoke/refresh.

Следующие шаги

Тестирование

Проверяйте жизненный цикл контейнера, переопределения и асинхронные обновления в unit- и widget-тестах.

Открыть тестирование

Справочник API

Смотрите сигнатуры ProviderScope, WidgetRef и методов контейнера.

Открыть справочник API