Provider — Flutter üçün holatni boshqarish paketi, 2019-yilda Rémi Rousselet tomonidan InheritedWidget üstiga qurilgan. Provider props drilling holda ma'lumotlarni vidjetlar daraxti bo'ylab pastga uzatish muammosini hal qiladi: har qanday vidjet context.read<T>() yoki context.watch<T>() orqali holatga kirishadi. pub.dev ma'lumotlariga köra, Provider 25 mingdan ortiq yoqtirish bilan Flutter-ning eng mashhur holat menejeridir.
Asosiy
Provider — Flutter-da holatni boshqarish va bog'liqliklarni kiritish üçün InheritedWidget asosida qurilgan paket. Provider vidjetlar daraxtida obyektni (holat, xizmat, repository) taqdim etadi va ma'lumot o'zgarganda UI-ni avtomatik qayta quradi. To'g'ridan-to'g'ri InheritedWidget ishlatishdan farqli o'laroq, Provider barcha boilerplate-ni olib tashlaydi.
Provider — Google tomonidan Flutter-da holatni boshqarish üçün rasman tavsiya etilgan usul (Flutter Team, 2019-2023). Flutter Community Survey 2025 ma'lumotlariga köra, Provider Flutter ilovalarining 72% ida ishlatiladi.
ChangeNotifier — Listener namunasini amalga oshiradigan o'rnatilgan Flutter sinfi. ChangeNotifier notifyListeners() chaqiruvi orqali obunachilarni o'zgarish haqida xabardor qiladi.
class CounterProvider extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
void reset() {
_count = 0;
notifyListeners();
}
}notifyListeners qoidalari: ma'lumotlar to'liq o'zgargandan keyin chaqiring — metod o'rtasida emas, oxirida. Bir nechta o'zgarishlar bo'lsa, har biridan keyin emas, balki barcha o'zgarishlardan keyin bir marta notifyListeners() chaqiring.
Consumer — ChangeNotifier-ga obuna bo'ladigan va har notifyListeners() chaqiruvida qayta quriladigan vidjet. Consumer üç parametrli builder funksiyasini qabul qiladi: context, model, child.
Consumer<CounterProvider>(
builder: (context, provider, child) => Column(
children: [
child!, // qayta qurilmaydi
Text('${provider.count}'),
ElevatedButton(
onPressed: () => provider.increment(),
child: Icon(Icons.add),
),
],
),
child: Text('Hisoblagich:'),
)context.watch — Provider-ga obuna bo'lish üçün BuildContext kengaytma metodi. context.read — obunasiz kirish. context.select — modelning ma'lum bir maydoniga obuna.
MultiProvider — ichma-ich joylashtirmasdan bir nechta Provider-ni ro'yxatdan o'tkazish üçün vidjet. MultiProvider providerlar ro'yxatini qabul qiladi.
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => CartProvider()),
ChangeNotifierProvider(create: (_) => AuthProvider()),
ProxyProvider<AuthProvider, OrderProvider>(
update: (_, auth, __) => OrderProvider(auth.userId),
),
],
child: MaterialApp(home: HomePage()),
)ProxyProvider — boshqa Provider-ga bog'liq Provider. StreamProvider va FutureProvider — reaktiv va asinxron ma'lumotlar üçün.
Provider test qilinadi vidjetni test qiymatlari bilan MultiProvider-ga o'rash orqali. Test üçün haqiqiy API yoki ma'lumotlar bazasi kerak emas.
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Counter increments on button tap',
(tester) async {
await tester.pumpWidget(
ChangeNotifierProvider(
create: (_) => CounterProvider(),
child: CounterScreen(),
),
);
await tester.tap(find.byKey(Key('increment')));
await tester.pump();
expect(find.text('1'), findsOneWidget);
},
);
}Provider samaradorligi InheritedWidget-ga asoslanadi: Provider o'zgarganda, context.watch yoki Consumer orqali obuna bo'lgan barcha vidjetlar qayta quriladi. context.select, Consumer child parametri bilan va const dan foydalaning.
| Metod | Obuna | Qayta qurish | Ishlatish |
|---|---|---|---|
| context.watch | To'liq model | Har qanday o'zgarish | Oddiy vidjetlar |
| Consumer | To'liq model | Har qanday o'zgarish | Child optimallashtirish bilan |
| context.select | Aniq maydon | Faqat maydon o'zgarganda | Murakkab modellar |
| context.read | Yo'q | Hech qachon | Hodisa handlerlari |
Tez-tez beriladigan savollar
Provider — ChangeNotifier bilan bog'liqliklarni kiritish üçün InheritedWidget üstidagi qobiq. BLoC — mantiqni izolyatsiya qilish üçün Event + Stream arxitektura namunasi.
ChangeNotifierProvider — ChangeNotifier namunalari üçün Provider turi. create orqali obyekt yaratadi, uni avlodlarga taqdim etadi va notifyListeners chaqirilganda Consumer-ni qayta quradi.
context.select dan foydalaning. Katta ChangeNotifier-larni bir nechta kichiklarga bo'ling. Statik qismlar üçün Consumer child dan foydalaning.
Ha. Provider o'zgarmas obyektlar üçün. StreamProvider oqimlar üçün. FutureProvider Future üçün. ProxyProvider boshqa Provider-larga bog'liq Provider-lar üçün.
ProviderNotFoundException — vidjetlar daraxtida yuqoriroqda e'lon qilinmagan Provider-ni olishga urinishda yuzaga keladigan ish vaqti istisnosi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.