Flutter Riverpod vs Provider: Hangi Durumda Hangisini Seçmeliyim

# Flutter Riverpod vs Provider: Hangi Durumda Hangisini Seçmeliyim

Flutter'da durum yönetimi için iki popüler seçenek var: Provider ve Riverpod. İkisi de aynı yapımcıdan geliyor ama farklı sorunları çözmek için tasarlanmış. Provider daha basit ve yaygın, Riverpod ise daha güçlü ama öğrenme eğrisi daha dik.

Provider ağaç yapısına dayanır. Üst componentten aşağıya doğru erişirsin. Riverpod ise bağımsız ve hiyerarşiye ihtiyaç duymaz. Riverpod'da provider'lar birbirinden bağımsız çalışabilir.

Provider'da context lazımdır, Riverpod'da değil. Bu Riverpod'u test etmeyi kolaylaştırır.

1class CounterNotifier extends ChangeNotifier {
2int count = 0;
3
4void increment() {
5count++;
6notifyListeners();
7}
8}
9
10final counterProvider = ChangeNotifierProvider((ref) => CounterNotifier());
11
12class MyApp extends StatelessWidget {
13@override
14Widget build(BuildContext context) {
15return ChangeNotifierProvider(
16create: (_) => CounterNotifier(),
17child: MaterialApp(
18home: CounterScreen(),
19),
20);
21}
22}
23
24class CounterScreen extends StatelessWidget {
25@override
26Widget build(BuildContext context) {
27final counter = context.watch<CounterNotifier>();
28return Scaffold(
29body: Center(
30child: Text('${counter.count}'),
31),
32floatingActionButton: FloatingActionButton(
33onPressed: () => counter.increment(),
34child: Icon(Icons.add),
35),
36);
37}
38}

Çıktı: Buton tıklandığında sayaç 1 artar ve ekranda güncellenir.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1final counterProvider = StateNotifierProvider<CounterNotifier, int>((ref) {
2return CounterNotifier();
3});
4
5class CounterNotifier extends StateNotifier<int> {
6CounterNotifier(): super(0);
7
8void increment() => state++;
9}
10
11class MyApp extends StatelessWidget {
12@override
13Widget build(BuildContext context) {
14return ProviderScope(
15child: MaterialApp(
16home: CounterScreen(),
17),
18);
19}
20}
21
22class CounterScreen extends ConsumerWidget {
23@override
24Widget build(BuildContext context, WidgetRef ref) {
25final count = ref.watch(counterProvider);
26return Scaffold(
27body: Center(
28child: Text('$count'),
29),
30floatingActionButton: FloatingActionButton(
31onPressed: () => ref.read(counterProvider.notifier).increment(),
32child: Icon(Icons.add),
33),
34);
35}
36}

Çıktı: Aynı sonuç, ama context'e ihtiyaç yok.

Provider seç eğer:
- Basit bir proje yapıyorsan
- Ekip Provider biliyorsa
- Context kullanmaktan çekinmiyorsan

Riverpod seç eğer:
- Testleme önemliyse (context'siz çalışır)
- Büyük ölçekli bir proje ise
- Provider'lar arasında bağımlılık çok ise
- Daha modern bir yaklaşım istiyorsan

Riverpod'u Provider'ın "gelişmiş versiyonu" olarak düşün. Başlangıçta Provider yeterli olabilir, ama büyüdükçe Riverpod'a geçmek mantıklı olur.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz