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),
        ),
      ],
    );
  }
}
Consumer-ის შიდა მუშაობა rebuild-ებს post-frame-ზე აწყობს, რაც ამცირებს setState-ის build-ის დროს გამოყენების პრობლემებს.
WidgetRef.watch გამოიყენეთ მხოლოდ იმ მნიშვნელობებისთვის, რომლებმაც rebuild უნდა გამოიწვიოს.
Side effect-ები build-ის გარეთ დატოვეთ; გამოიყენეთ callback-ები და invoke/refresh მეთოდები.

შემდეგი ნაბიჯები

ტესტირება

container-ის lifecycle, overrides და async განახლებები გადაამოწმეთ unit და widget ტესტებში.

ტესტირების გახსნა

API ცნობარი

იხილეთ ProviderScope, WidgetRef და container მეთოდების signature-ები.

API ცნობარის გახსნა