CodeBlanks Logo Icon CodeBlanks

StateNotifier

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

main.dart
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

main.dart
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

Soru
class CounterNotifier extends StateNotifier<int> {
  CounterNotifier() : super(____);
  void increment() => state = state + 1;
}
Cevap
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

İleri seviye bölümündeki tüm dersler