Інтэграцыя 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),
),
],
);
}
}
Наступныя крокі
Тэставанне
Праверце жыццёвы цыкл кантэйнера, override-ы і асінхронныя абнаўленні ў unit- і widget-тэстах.
Адкрыць TestingAPI-даведнік
Паглядзіце подпісы ProviderScope, WidgetRef і метадаў кантэйнера.
Адкрыць API Reference