Advanced

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
});