Olaylar
Giris
Olaylar, uygulamanizda bir sey gerçeklestikten sonra mantik islemeniz gerektiginde güçlüdür. Nylo'nun olay sistemi, uygulamanizin herhangi bir yerinden olaylar olusturmaniza, tetiklemenize ve dinlemenize olanak taniyarak, duyarli ve olay odakli Flutter uygulamalari olusturmayi kolaylastirir.
Olaylari Anlamak
Olay odakli programlama, uygulamanizin akisinin kullanici eylemleri, sensör çiktilari veya diger programlardan ya da is parçaciklarindan gelen mesajlar gibi olaylar tarafindan belirlendigi bir paradigmadir. Bu yaklasim, uygulamanizin farkli bölümlerini birbirinden ayirmaya yardimci olarak kodunuzu daha sürdürülebilir ve anlasilir hale getirir.
Yaygin Olay Örnekleri
Uygulamanizda kullanabileceginiz bazi tipik olaylar:
- Kullanici kaydi tamamlandi
- Kullanici giris yapti/çikis yapti
- Ürün sepete eklendi
- Ödeme basariyla islendi
- Veri senkronizasyonu tamamlandi
- Push bildirimi alindi
Olay Olusturma
Nylo framework CLI veya Metro kullanarak yeni bir olay olusturabilirsiniz:
metro make:event PaymentSuccessfulEvent
Komutu çalistirdiktan sonra, app/events/ dizininde yeni bir olay dosyasi olusturulacaktir.
Olay Yapisi
Yeni olusturulan bir olay dosyasinin yapisi söyledir (örn. app/events/payment_successful_event.dart):
import 'package:nylo_framework/nylo_framework.dart';
class PaymentSuccessfulEvent implements NyEvent {
final listeners = {
DefaultListener: DefaultListener(),
};
}
class DefaultListener extends NyListener {
handle(dynamic event) async {
// Handle the payload from event
}
}
Olaylari Tetikleme
Olaylar, event yardimci metodu kullanilarak uygulamanizin herhangi bir yerinden tetiklenebilir.
Temel Olay Tetikleme
Veri olmadan bir olay tetiklemek için:
event<PaymentSuccessfulEvent>();
Veri ile Tetikleme
Olayinizla birlikte veri göndermek için:
event<PaymentSuccessfulEvent>(data: {
'user': user,
'amount': amount,
'transactionId': 'txn_123456'
});
Olaylari Yayinlama
Varsayilan olarak, Nylo olaylari yalnizca olay sinifinda tanimlanan dinleyiciler tarafindan islenir. Bir olayi yayinlamak (harici dinleyicilere açik hale getirmek) için broadcast parametresini kullanin:
event<PaymentSuccessfulEvent>(
data: {'user': user, 'amount': amount},
broadcast: true
);
Olaylari Dinleme
Nylo, olaylari dinlemek ve yanit vermek için birden fazla yol sunar.
listenOn Yardimcisini Kullanma
listenOn yardimcisi, yayinlanan olaylari dinlemek için uygulamanizin herhangi bir yerinde kullanilabilir:
NyEventSubscription subscription = listenOn<PaymentSuccessfulEvent>((data) {
// Access event data
final user = data['user'];
final amount = data['amount'];
// Handle the event
showSuccessMessage("Payment of $amount received");
});
listen Yardimcisini Kullanma
listen yardimcisi NyPage ve NyState siniflarinda kullanilabilir. Widget kaldirildiginda abonelikleri otomatik olarak yönetir ve iptal eder:
class _CheckoutPageState extends NyPage<CheckoutPage> {
@override
get init => () {
listen<PaymentSuccessfulEvent>((data) {
// Handle payment success
routeTo(OrderConfirmationPage.path);
});
listen<PaymentFailedEvent>((data) {
// Handle payment failure
displayErrorMessage(data['error']);
});
};
// Rest of your page implementation
}
Olay Aboneligini Iptal Etme
listenOn kullanirken, bellek sizintilarini önlemek için aboneligi manuel olarak iptal etmeniz gerekir:
// Store the subscription
final subscription = listenOn<PaymentSuccessfulEvent>((data) {
// Handle event
});
// Later, when no longer needed
subscription.cancel();
listen yardimcisi, widget kaldirildiginda abonelik iptalini otomatik olarak yönetir.
Dinleyicilerle Çalisma
Dinleyiciler, olaylara yanit veren siniflardir. Her olay, olayin farkli yönlerini islemek için birden fazla dinleyiciye sahip olabilir.
Birden Fazla Dinleyici Ekleme
listeners özelligini güncelleyerek olayiniza birden fazla dinleyici ekleyebilirsiniz:
class PaymentSuccessfulEvent implements NyEvent {
final listeners = {
NotificationListener: NotificationListener(),
AnalyticsListener: AnalyticsListener(),
OrderProcessingListener: OrderProcessingListener(),
};
}
Dinleyici Mantigini Uygulama
Her dinleyici, olayi islemek için handle metodunu uygulamalidir:
class NotificationListener extends NyListener {
handle(dynamic event) async {
// Send notification to user
final user = event['user'];
await NotificationService.sendNotification(
userId: user.id,
title: "Payment Successful",
body: "Your payment of ${event['amount']} was processed successfully."
);
}
}
class AnalyticsListener extends NyListener {
handle(dynamic event) async {
// Log analytics event
await AnalyticsService.logEvent(
"payment_successful",
parameters: {
'amount': event['amount'],
'userId': event['user'].id,
}
);
}
}
Global Olay Yayini
Tüm olaylarin her seferinde broadcast: true belirtmeden otomatik olarak yayinlanmasini istiyorsaniz, global yayini etkinlestirebilirsiniz.
Global Yayini Etkinlestirme
app/providers/app_provider.dart dosyanizi düzenleyin ve Nylo örneginize broadcastEvents() metodunu ekleyin:
class AppProvider implements NyProvider {
@override
boot(Nylo nylo) async {
// Other configuration
// Enable broadcasting for all events
nylo.broadcastEvents();
}
}
Global yayin etkinlestirildiginde, olaylari daha kisa bir sekilde tetikleyebilir ve dinleyebilirsiniz:
// Dispatch event (no need for broadcast: true)
event<PaymentSuccessfulEvent>(data: {
'user': user,
'amount': amount,
});
// Listen for the event anywhere
listen<PaymentSuccessfulEvent>((data) {
// Handle event data
});