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),
),
],
);
}
}
Следващи стъпки
Тестване
Проверете жизнения цикъл на контейнера, override-ите и асинхронните актуализации в unit и widget тестове.
Отвори TestingAPI справка
Вижте подписите на ProviderScope, WidgetRef и методите на контейнера.
Отвори API Reference