Flutter
StateNotifierProvider
StateNotifierProvider ile ağaca sağlamayı öğrenirsin.
StateNotifierProvider nedir?
StateNotifierProvider, bir StateNotifier'ı widget ağacına sağlayan Riverpod provider'ıdır. ref.watch(provider) ile state'e erişir, ref.read(provider.notifier) ile StateNotifier'ın kendisini alıp metotlarını çağırırsın. İkinci generic parametre state'in türünü belirtir.
final counterProvider = StateNotifierProvider<CounterNotifier, int>(
(ref) => CounterNotifier(),
);
watch ve read farkı
ref.watch state değişince widget'ı yeniden inşa eder; ref.read ise anlık okuma yapar ve yeniden inşa tetiklemez. Bu yüzden butonların onPressed'ında read kullanılır. Yanlışlıkla watch kullanırsan her tıklamada yeniden inşa tetiklenebilir.
Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(counterProvider);
return ElevatedButton(
onPressed: () => ref.read(counterProvider.notifier).increment(),
child: Text('$count'),
);
}
Uygulama StateNotifierProvider kullan
counterProvider adında bir StateNotifierProvider tanımla; CounterNotifier tipinde, int state tutsun. main içinde ProviderContainer oluştur, iki kez increment çağır ve state'i yazdır.
Örnek çözümü göster
import 'package:flutter_riverpod/flutter_riverpod.dart';
class CounterNotifier extends StateNotifier<int> {
CounterNotifier() : super(0);
void increment() => state = state + 1;
}
final counterProvider = StateNotifierProvider<CounterNotifier, int>(
(ref) => CounterNotifier(),
);
void main() {
final container = ProviderContainer();
container.read(counterProvider.notifier).increment();
container.read(counterProvider.notifier).increment();
print(container.read(counterProvider));
}
Kendini test et
-
StateNotifierProvider ile state'i güncellemek için hangisi kullanılır?
- ref.read(provider).metot()
- ref.notify(provider).metot()
- ref.read(provider.notifier).metot()
- ref.watch(provider).metot()
Cevabı göster
ref.read(provider.notifier).metot() — state'i değiştiren metotlar StateNotifier'ın kendisindeidir; bu yüzden provider.notifier üzerinden read ile alınır.
-
StateNotifierProvider tanımla
final counterProvider = StateNotifierProvider<CounterNotifier, int>(
(ref) => ____,
);
Cevabı göster
final counterProvider = StateNotifierProvider<CounterNotifier, int>(
(ref) => CounterNotifier(),
);
-
StateNotifierProvider parçaları
- StateNotifierProvider
- StateNotifier sağlar
- ref.watch(provider)
- state'i dinler
- ref.read(provider.notifier)
- StateNotifier'ı verir
- (ref) => CounterNotifier()
- Oluşturucu fonksiyon
Sıradaki ders: AsyncValue