Özet - Riverpod ileri
- Flutter kursu
- İleri seviye
- Ders 5/69
- 4 dk
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
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
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
state = await AsyncValue.____(() async => 'Ayşe');
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 |