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;34void increment() {5count++;6notifyListeners();7}8}910final counterProvider = ChangeNotifierProvider((ref) => CounterNotifier());1112class MyApp extends StatelessWidget {13@override14Widget build(BuildContext context) {15return ChangeNotifierProvider(16create: (_) => CounterNotifier(),17child: MaterialApp(18home: CounterScreen(),19),20);21}22}2324class CounterScreen extends StatelessWidget {25@override26Widget 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.
1final counterProvider = StateNotifierProvider<CounterNotifier, int>((ref) {2return CounterNotifier();3});45class CounterNotifier extends StateNotifier<int> {6CounterNotifier(): super(0);78void increment() => state++;9}1011class MyApp extends StatelessWidget {12@override13Widget build(BuildContext context) {14return ProviderScope(15child: MaterialApp(16home: CounterScreen(),17),18);19}20}2122class CounterScreen extends ConsumerWidget {23@override24Widget 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.
0 yorum