CodeBlanks Logo Icon CodeBlanks

Özet - Riverpod ileri

StateNotifier ve AsyncValue'yi birleştirerek API ekranı yaparsın.

StateNotifier ve AsyncValue birleşimi

Bir API ekranında StateNotifier<AsyncValue<T>> kullanarak hem state yönetimini hem de async durum modellemeyi birleştirirsin. Yapıcı metot başlangıçta loading durumunu verir ve veri yüklemeyi başlatır. AsyncValue.guard Future'ı güvenli biçimde çalıştırır; başarırsa data'ya, hata verirse error'a geçer.

class UserNotifier extends StateNotifier<AsyncValue<String>> {
  UserNotifier() : super(const AsyncValue.loading()) {
    _load();
  }
  Future<void> _load() async {
    state = const AsyncValue.loading();
    state = await AsyncValue.guard(() async => 'Ayşe');
  }
}

Uygulama UserNotifier sınıfı yaz

UserNotifier adında StateNotifier<AsyncValue<String>> türeten bir sınıf yaz. Yapıcı super(const AsyncValue.loading()) ile başlasın ve _load'u çağırsın. _load önce loading yapsın, sonra AsyncValue.guard(() async => 'Ayşe') ile state'i güncellesin. main içinde örnek oluştur, _load'u bekle ve state.when ile data durumunda değeri yazdır.

Başlangıç kodu

main.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';

// UserNotifier sınıfını yaz
// StateNotifier<AsyncValue<String>> türet
// loading ile başlat, _load çağır
// _load 'Ayşe' değerini güvenli biçimde yükle

void main() async {
  // UserNotifier oluştur, bekle, when ile yazdır
}

Örnek çözüm

main.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';

class UserNotifier extends StateNotifier<AsyncValue<String>> {
  UserNotifier() : super(const AsyncValue.loading()) {
    _load();
  }
  Future<void> _load() async {
    state = const AsyncValue.loading();
    state = await AsyncValue.guard(() async => 'Ayşe');
  }
}

void main() async {
  final notifier = UserNotifier();
  await notifier._load();
  notifier.state.when(
    data: (s) => print(s),
    loading: () => print('Yükleniyor'),
    error: (e, s) => print('Hata'),
  );
}

Beklenen çıktı

Ayşe

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 AsyncValue.guard ne yapar?

  • Future'ı çalıştırır, başarırsa data'ya, hata verirse error'a geçer Doğru cevap
  • Future'ı iptal eder
  • Yalnızca loading durumunu ayarlar
  • Stream'i Future'a çevirir

Açıklama: guard, kendisine verilen Future'ı çalıştırır ve sonucu uygun AsyncValue'ye çevirir; try/catch yazmak zorunda kalmazsın.

2 AsyncValue.guard ile yükle

Soru
state = await AsyncValue.____(() async => 'Ayşe');
Cevap
state = await AsyncValue.guard(() async => 'Ayşe');

Açıklama: guard metodu, Future'ı çalıştırır ve sonucu AsyncValue'ye çevirir.

3 API ekranı parçaları

Kavram Anlamı
StateNotifier<AsyncValue<T>> Async state tutar
AsyncValue.guard Future'ı güvenli sarar
super(AsyncValue.loading()) Başlangıç loading
when Üç durumu işler

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