Aniq container egaligi bilan Flutter integratsiyasi.

ProviderScope container'ga egalik qilishi yoki uni tashqaridan qabul qilishi mumkin. Consumer API'lari WidgetRef kirishini Riverpod uslubidagi kod bilan mos holda saqlaydi.

ProviderScope egaligi

Container egaligi dispose mas'uliyatini o'zgartiradi.

Ichki container

ProviderScope(child: ...) avtomatik dispose qilinadi

Tashqi container

ProviderScope(container: c, ...) uchun chaqiruvchi c.dispose() chaqirishi kerak

Boshqarilmaydigan scope

UncontrolledProviderScope container'ni hech qachon dispose qilmaydi

Keng tarqalgan xato

Widget testlarda, kutayotgan timer leak'laridan qochish uchun tashqaridan kiritilgan ProviderContainer'ni dispose qilishni unutmang.

Consumer variantlari

Barcha variantlar WidgetRef taqdim etadi; widget uslubi va mahalliy holat ehtiyojlariga qarab tanlang.

Ilova ildizi

Qaysi biri qachon ishlatiladi

Consumer: kichik reaktiv hududlar uchun mahalliy builder bloki.
ConsumerWidget: build(context, ref) ga ega stateless widget.
ConsumerStatefulWidget: ConsumerState ichida ref bo'lgan stateful widget.

Misol: ConsumerStatefulWidget

WidgetRef ham, mahalliy o'zgaruvchan UI holati ham kerak bo'lganda ConsumerState'dan foydalaning.

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'ning ichki logikasi rebuild'larni frame'dan keyinga rejalashtiradi, bu build paytidagi setState muammolarini kamaytiradi.
WidgetRef.watch'ni faqat rebuild'ni ishga tushirishi kerak bo'lgan qiymatlar uchun ishlating.
Yon ta'sirlarni build tashqarisida saqlang; callback'lar va invoke/refresh usullaridan foydalaning.

Keyingi qadamlar

Sinov

Container hayot tsikli, override'lar va async yangilanishlarni unit va widget testlarida tekshiring.

Sinovni ochish

API ma'lumotnomasi

ProviderScope, WidgetRef va container usullari uchun signature'larni ko'ring.

API ma'lumotnomasini ochish