Flutter-ის ინტეგრაცია container-ის მკაფიო ownership-ით.
ProviderScope-ს შეუძლია container ფლობდეს ან ის გარედან მიიღოს. Consumer API-ები WidgetRef-ზე წვდომას Riverpod-ის სტილის კოდთან თავსებადად ინარჩუნებს.
ProviderScope-ის ownership
Container-ის ownership-ი dispose-ის პასუხისმგებლობას ცვლის.
შიდა container
ProviderScope(child: ...) ავტომატურად განთავისუფლდება
გარე container
ProviderScope(container: c, ...) საჭიროებს, რომ caller-მა c.dispose() გამოიძახოს
უკონტროლო scope
UncontrolledProviderScope არასოდეს აკეთებს container-ის dispose-ს
ჩვეულებრივი ხაფანგი
widget-ის ტესტებში გახსოვდეთ, რომ გარედან injected ProviderContainer უნდა განთავისუფლოთ, რათა pending timer leaks თავიდან აიცილოთ.
Consumer-ის ვარიანტები
ყველა ვარიანტი WidgetRef-ს აჩვენებს; აირჩიეთ widget-ის სტილისა და ადგილობრივი state-ის საჭიროებების მიხედვით.
აპის ძირი
როდის გამოიყენოთ თითოეული
Consumer: ადგილობრივი builder ბლოკი მცირე reactive არეებისთვის.
ConsumerWidget: stateless widget build(context, ref)-ით.
ConsumerStatefulWidget: stateful widget ref-ით ConsumerState-ის შიგნით.
მაგალითი: ConsumerStatefulWidget
გამოიყენეთ ConsumerState მაშინ, როცა გჭირდებათ როგორც WidgetRef, ისე ადგილობრივი, შესაცვლელი UI state.
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),
),
],
);
}
}
შემდეგი ნაბიჯები
ტესტირება
container-ის lifecycle, overrides და async განახლებები გადაამოწმეთ unit და widget ტესტებში.
ტესტირების გახსნაAPI ცნობარი
იხილეთ ProviderScope, WidgetRef და container მეთოდების signature-ები.
API ცნობარის გახსნა