Flutter интеграција со јасна сопственост на контейнерот.
ProviderScope може да го поседува контейнерот или да го прими однадвор. Consumer API-ja ја задржуваат WidgetRef пристапноста усогласена со Riverpod стилот на код.
Сопственост на ProviderScope
Сопственоста на контейнерот ја менува одговорноста за ослободување.
Внатрешен контейнер
ProviderScope(child: ...) автоматски се ослободува
Надворешен контейнер
ProviderScope(container: c, ...) бара c.dispose() од повикувачот
Неконтролиран scope
UncontrolledProviderScope никогаш не го ослободува контейнерот
Честа замка
Во widget тестови, запомнете да го ослободите надворешно внесениот ProviderContainer за да избегнете преостанати timer leaks.
Consumer варијанти
Сите опции изложуваат WidgetRef; избирајте според стилот на widget-от и потребите за локална состојба.
Корен на апликацијата
Кога да се користи секој
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),
),
],
);
}
}
Следни чекори
Тестирање
Потврдете го lifecycle-от на контейнерот, override-ите и async ажурирањата во unit и widget тестови.
Отвори тестирањеAPI референца
Видете ги сигнатурите за ProviderScope, WidgetRef и методите на контейнерот.
Отвори API референца