StateNotifier
- Flutter kursu
- İleri seviye
- Ders 1/69
- 4 dk
StateNotifier ile değişmez state yönetmeyi öğrenirsin.
StateNotifier nedir?
StateNotifier, tek bir değişmez (immutable) state tutan ve değişiklikleri yöneten sınıftır. State'i güncellemek için state = newState ataması yaparsın; bu, eski state'i yenisiyle değiştirir. Riverpod ile birlikte kullanıldığında state değişince dinleyen widget'lar otomatik yeniden inşa edilir.
class CounterNotifier extends StateNotifier<int> {
CounterNotifier() : super(0);
void increment() => state = state + 1;
}Değişmez state ilkesi
State değişmez olduğu için state.alan = değer gibi doğrudan atama yapamazsın; her zaman yeni bir nesne ataman gerekir. Bu, önceki state'i bozmadan değişiklikleri izlemeyi ve geri almayı kolaylaştırır. Listelerde [...state, öğe] ile yeni bir liste oluşturmak yaygın bir kalıptır.
class TodoNotifier extends StateNotifier<List<String>> {
TodoNotifier() : super([]);
void add(String todo) => state = [...state, todo];
}Uygulama CounterNotifier sınıfı yaz
CounterNotifier adında, int tutan bir StateNotifier sınıfı yaz. super(0) ile başlat. increment metodu state'i 1 artırsın. main içinde bir örnek oluştur, iki kez increment çağır ve state'i yazdır.
Başlangıç kodu
import 'package:flutter_riverpod/flutter_riverpod.dart';
// CounterNotifier sınıfını buraya yaz
// int state tutsun, increment ile 1 artırsın
void main() {
// örnek oluştur, iki kez artır, yazdır
}Örnek çözüm
import 'package:flutter_riverpod/flutter_riverpod.dart';
class CounterNotifier extends StateNotifier<int> {
CounterNotifier() : super(0);
void increment() => state = state + 1;
}
void main() {
final counter = CounterNotifier();
counter.increment();
counter.increment();
print(counter.state);
}Beklenen çıktı
2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 StateNotifier ile state nasıl güncellenir?
- state = yeniDeğer Doğru cevap
- state.update(yeniDeğer)
- setState(yeniDeğer)
- notify(yeniDeğer)
Açıklama: StateNotifier'da state bir alan olduğu için doğrudan atama yapılır; update, setState veya notify metotları yoktur.
2 Başlangıç state'i ver
class CounterNotifier extends StateNotifier<int> {
CounterNotifier() : super(____);
void increment() => state = state + 1;
}
class CounterNotifier extends StateNotifier<int> {
CounterNotifier() : super(0);
void increment() => state = state + 1;
}
Açıklama: StateNotifier'ın super çağrısı, başlangıç state değerini alır; burada saymaç 0'dan başlar.
3 StateNotifier parçaları
| Kavram | Anlamı |
|---|---|
StateNotifier<int> |
int türünde state tutar |
super(0) |
Başlangıç değeri 0 |
state = ... |
State'i günceller |
extends StateNotifier |
Sınıfı türetme |