Event sınıfları
- Flutter kursu
- İleri seviye
- Ders 7/69
- 4 dk
Event sınıfları ile intent tanımlamayı öğrenirsin.
Event sınıfları nedir?
Event'ler, kullanıcının niyetini (intent) temsil eden sınıflardır. Bir butona basma, form gönderme gibi eylemlerin her biri ayrı bir event sınıfına karşılık gelir. Tüm event'ler ortak bir soyut sınıftan türetilir ve bloc.add(EventType()) ile tetiklenir.
abstract class CounterEvent {}
class IncrementEvent extends CounterEvent {}
class DecrementEvent extends CounterEvent {}
bloc.add(IncrementEvent());Event adlandırma ve immutability
Event sınıfları değişmez (immutable) olmalıdır: tüm alanları final olur. Genellikle fiil + Event biçiminde adlandırılırlar, örneğin LoginSubmittedEvent veya ItemDeletedEvent. Parametre taşıyan event'ler veriyi kurucuda alır.
class ItemDeletedEvent extends TodoEvent {
final int index;
ItemDeletedEvent(this.index);
}Uygulama TodoBloc ve AddItemEvent yaz
TodoEvent soyut sınıfını ve AddItemEvent alt sınıfını tanımla (başlık parametresi taşır). TodoBloc, boş liste ile başlasın ve AddItemEvent işleyicisi listedeye başlığı eklesin. main'de event tetikle, bekle ve ilk öğeyi yazdır.
Başlangıç kodu
import 'package:bloc/bloc.dart';
// TodoEvent soyut sınıfını tanımla
// AddItemEvent sınıfı: başlık parametresi
class TodoState {
final List<String> items;
TodoState(this.items);
}
// TodoBloc sınıfını yaz
// başlangıç state boş liste
// AddItemEvent işleyicisi listeye başlık ekle
void main() async {
// oluştur, AddItemEvent ekle, bekle, yazdır
}Örnek çözüm
import 'package:bloc/bloc.dart';
abstract class TodoEvent {}
class AddItemEvent extends TodoEvent {
final String title;
AddItemEvent(this.title);
}
class TodoState {
final List<String> items;
TodoState(this.items);
}
class TodoBloc extends Bloc<TodoEvent, TodoState> {
TodoBloc() : super(TodoState([])) {
on<AddItemEvent>((event, emit) =>
emit(TodoState([...state.items, event.title])));
}
}
void main() async {
final bloc = TodoBloc();
bloc.add(AddItemEvent('Süt al'));
await Future.delayed(Duration(milliseconds: 10));
print(bloc.state.items.first);
}Beklenen çıktı
Süt al
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir event sınıfı neyi temsil eder?
- Arayüzün o anki görünümünü
- Veritabanı tablo yapısını
- Widget ağacındaki hiyerarşiyi
- Kullanıcının niyetini (intent) Doğru cevap
Açıklama: Event'ler kullanıcı niyetini temsil eder; arayüz görünümü state, hiyerarşi widget ağacı ile ilgili.
2 Event sınıfı tanımla
class AddItemEvent extends ____ {
final String title;
AddItemEvent(this.title);
}
class AddItemEvent extends TodoEvent {
final String title;
AddItemEvent(this.title);
}
Açıklama: AddItemEvent bir event olduğu için temel event sınıfı olan TodoEvent'ten türetilir; Bloc veya State değil.
3 Event parçaları
| Kavram | Anlamı |
|---|---|
abstract class TodoEvent |
Temel event sınıfı |
class AddItemEvent extends |
Türetilmiş event |
bloc.add(Event()) |
Event tetikler |
final String title |
Event parametresi |