Provider — pakete para sa pamamahala ng estado para sa Flutter, nilikha ni Rémi Rousselet noong 2019 bilang isang wrapper sa InheritedWidget. Nilulutas ng Provider ang problema ng pagpapasa ng data pababa sa widget tree nang walang props drilling: anumang widget ay nakakakuha ng access sa estado sa pamamagitan ng context.read<T>() o context.watch<T>(). Ayon sa pub.dev, ang Provider ang pinakasikat na tagapamahala ng estado ng Flutter na may higit sa 25 libong likes.
Mga Pangunahing Punto
Provider — pakete para sa pamamahala ng estado at dependency injection sa Flutter, binuo sa ibabaw ng InheritedWidget. Nagbibigay ang Provider ng object (estado, serbisyo, repository) sa widget tree at awtomatikong muling nagtatayo ng UI kapag nagbago ang data. Hindi tulad ng direktang paggamit ng InheritedWidget, inaalis ng Provider ang lahat ng boilerplate.
Opisyal na inirerekomenda ng Google ang Provider para sa pamamahala ng estado sa Flutter (Flutter Team, 2019-2023). Ayon sa Flutter Community Survey 2025, ginagamit ang Provider sa 72% ng Flutter applications.
ChangeNotifier — built-in na Flutter class na nagpapatupad ng Listener pattern. Inaabisuhan ng ChangeNotifier ang mga subscriber tungkol sa pagbabago sa pamamagitan ng pagtawag ng notifyListeners().
class CounterProvider extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
void reset() {
_count = 0;
notifyListeners();
}
}Mga patakaran ng notifyListeners: tawagan pagkatapos ng kumpletong pagbabago ng data — hindi sa gitna ng method, kundi sa dulo.
Consumer — widget na nagsa-subscribe sa ChangeNotifier at muling nagtatayo sa bawat tawag ng notifyListeners().
Consumer<CounterProvider>(
builder: (context, provider, child) => Column(
children: [
child!, // hindi muling itinatayo
Text('${provider.count}'),
ElevatedButton(
onPressed: () => provider.increment(),
child: Icon(Icons.add),
),
],
),
child: Text('Bilang:'),
)context.watch — BuildContext extension method para mag-subscribe sa Provider. context.read — access nang walang subscription. context.select — subscription sa isang partikular na field ng modelo.
MultiProvider — widget para magrehistro ng maraming Provider nang walang nesting. ProxyProvider — Provider na nakadepende sa ibang Provider.
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => CartProvider()),
ChangeNotifierProvider(create: (_) => AuthProvider()),
ProxyProvider<AuthProvider, OrderProvider>(
update: (_, auth, __) => OrderProvider(auth.userId),
),
],
child: MaterialApp(home: HomePage()),
)Provider ay sinusuri sa pamamagitan ng pagbalot ng widget sa MultiProvider na may test values.
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);
},
);
}Pagganap ng Provider ay batay sa InheritedWidget: kapag nagbago ang Provider, lahat ng widget na naka-subscribe sa pamamagitan ng context.watch o Consumer ay muling itinatayo.
| Paraan | Subscription | Muling itayo | Gamit |
|---|---|---|---|
| context.watch | Buong modelo | Bawat pagbabago | Simpleng widget |
| Consumer | Buong modelo | Bawat pagbabago | May child optimization |
| context.select | Tiyak na field | Kapag nagbago ang field | Komplikadong modelo |
| context.read | Wala | Hindi kailanman | Event handlers |
Mga Madalas Itanong
Provider — wrapper sa InheritedWidget para sa dependency injection na may ChangeNotifier. BLoC — architectural pattern na may Event + Stream para sa isolation ng lohika.
ChangeNotifierProvider — uri ng Provider para sa mga instance ng ChangeNotifier. Gumagawa ng object sa pamamagitan ng create, ibinibigay ito sa mga descendant at muling itinatayo ang Consumer kapag tinawag ang notifyListeners.
Gamitin ang context.select sa halip na context.watch. Hatiin ang malalaking ChangeNotifier sa maraming maliliit.
Oo. Provider para sa mga hindi nababagong object. StreamProvider para sa stream. FutureProvider para sa Future. ProxyProvider para sa Provider na nakadepende sa iba.
ProviderNotFoundException — runtime exception na nangyayari kapag sinusubukang kumuha ng Provider na hindi idineklara nang mas mataas sa widget tree.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din