Bloc sınıfı
- Flutter kursu
- İleri seviye
- Ders 6/69
- 4 dk
Bloc sınıfı ile event -> state akışını yönetmeyi öğrenirsin.
Bloc sınıfı nedir?
Bloc, event'leri state'lere dönüştüren sınıftır. Cubit'ten farkı, metot çağrısı yerine event nesneleriyle çalışmasıdır. Her event türü için on<Event> ile bir handler kaydedersin; handler emit ile yeni state üretir.
class CounterBloc extends Bloc<CounterEvent, CounterState> {
CounterBloc() : super(CounterState(0)) {
on<IncrementEvent>((event, emit) =>
emit(CounterState(state.count + 1)));
}
}on<Event> ve emit
on<Event> ile bir event türü için handler kaydedersin. Handler iki parametre alır: event ve emit. emit(yeniState) çağrısı state'i günceller ve dinleyen widget'ları uyarır. emit yalnızca handler içinde çağrılabilir.
on<IncrementEvent>((event, emit) =>
emit(CounterState(state.count + 1)));Uygulama CounterBloc sınıfı yaz
CounterBloc adında, Bloc<CounterEvent, CounterState> türeten bir sınıf yaz. Başlangıç değeri 0 olsun. IncrementEvent işleyicisi sayacı 1 artırsın. main içinde örnek oluştur, iki kez event ekle, bekle ve state.count'u yazdır.
Başlangıç kodu
import 'package:bloc/bloc.dart';
class CounterEvent {}
class IncrementEvent extends CounterEvent {}
class CounterState {
final int count;
CounterState(this.count);
}
// CounterBloc sınıfını yaz
// Bloc<CounterEvent, CounterState> türet
// başlangıç değer 0 ile başlat
// IncrementEvent işleyicisi sayacı 1 artırsın
void main() async {
// oluştur, iki kez event ekle, bekle, yazdır
}Örnek çözüm
import 'package:bloc/bloc.dart';
class CounterEvent {}
class IncrementEvent extends CounterEvent {}
class CounterState {
final int count;
CounterState(this.count);
}
class CounterBloc extends Bloc<CounterEvent, CounterState> {
CounterBloc() : super(CounterState(0)) {
on<IncrementEvent>((event, emit) =>
emit(CounterState(state.count + 1)));
}
}
void main() async {
final bloc = CounterBloc();
bloc.add(IncrementEvent());
bloc.add(IncrementEvent());
await Future.delayed(Duration(milliseconds: 10));
print(bloc.state.count);
}Beklenen çıktı
2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bloc ile Cubit arasındaki temel fark nedir?
- Bloc event nesneleriyle, Cubit metot çağrılarıyla çalışır Doğru cevap
- Bloc yalnızca async state tutar, Cubit sync tutar
- Cubit event kullanır ama Bloc state tutmaz
- İkisi tamamen aynıdır, yalnızca ad farklıdır
Açıklama: Bloc, event nesnelerini alıp state üretir; Cubit'te ise doğrudan metot çağrılır ve içinden emit yapılır.
2 emit çağrısı
on<IncrementEvent>((event, emit) => ____(CounterState(state.count + 1)));
on<IncrementEvent>((event, emit) => emit(CounterState(state.count + 1)));
Açıklama: Handler içinde yeni state üretmek için emit çağrılır; add event eklemek için, state ise okumak için kullanılır.
3 Bloc parçaları
| Kavram | Anlamı |
|---|---|
on<IncrementEvent> |
Event işleyici kaydı |
emit |
State üretir |
Bloc<Event, State> |
İki generic parametre |
super(CounterState(0)) |
Başlangıç state |