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 уиджет с build(context, ref).
ConsumerStatefulWidget: stateful уиджет с 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-ите за post-frame, което намалява проблемите със setState по време на build.
Използвайте WidgetRef.watch само за стойности, които трябва да задействат rebuild.
Дръжте страничните ефекти извън build; използвайте callback-и и методите invoke/refresh.

Следващи стъпки

Тестване

Проверете жизнения цикъл на контейнера, override-ите и асинхронните актуализации в unit и widget тестове.

Отвори Testing

API справка

Вижте подписите на ProviderScope, WidgetRef и методите на контейнера.

Отвори API Reference