Flutter
Bloc sınıfı
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.
Örnek çözümü göster
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);
}
Kendini test et
-
Bloc ile Cubit arasındaki temel fark nedir?
- Bloc event nesneleriyle, Cubit metot çağrılarıyla çalışır
- 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
Cevabı göster
Bloc event nesneleriyle, Cubit metot çağrılarıyla çalışır — Bloc, event nesnelerini alıp state üretir; Cubit'te ise doğrudan metot çağrılır ve içinden emit yapılır.
-
emit çağrısı
on<IncrementEvent>((event, emit) => ____(CounterState(state.count + 1)));
Cevabı göster
on<IncrementEvent>((event, emit) => emit(CounterState(state.count + 1)));
-
Bloc parçaları
- on<IncrementEvent>
- Event işleyici kaydı
- emit
- State üretir
- Bloc<Event, State>
- İki generic parametre
- super(CounterState(0))
- Başlangıç state
Sıradaki ders: Event sınıfları