State Machine Deseni: Flutter'da Karmaşık İş Akışlarını Yönetmek

# State Machine Deseni: Flutter'da Karmaşık İş Akışlarını Yönetmek

State Machine, bir sistemin belirli durumlara (state) göre davranış şekilde değişmesini sağlayan tasarım desenidir. Örneğin bir ödeme ekranı: başlangıç yükleniyor başarılı hata gibi durumlar arasında geçiş yapar. Her durumda farklı UI gösterilir, farklı işlemler yapılır.

Flutter'da state management karmaşıklaştığında, State Machine kullanmak kodu düzenli tutar ve hataları azaltır.

Önce tüm olası durumları bir enum veya sınıf olarak tanımla:

1enum PaymentState {
2initial, // Başlangıç
3loading, // İşlem devam ediyor
4success, // Başarılı
5failure // Başarısız
6}

Her durumun kendi sınıfı olabilir (daha esnek):

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1abstract class PaymentState {}
2
3class PaymentInitial extends PaymentState {}
4class PaymentLoading extends PaymentState {}
5class PaymentSuccess extends PaymentState {
6final String transactionId;
7PaymentSuccess(this.transactionId);
8}
9class PaymentFailure extends PaymentState {
10final String error;
11PaymentFailure(this.error);
12}

Bir event (olayın) tetiklediği geçişleri tanımla:

1class PaymentBloc extends Cubit<PaymentState> {
2PaymentBloc(): super(PaymentInitial());
3
4Future<void> processPayment(String amount) async {
5emit(PaymentLoading());
6try {
7await Future.delayed(Duration(seconds: 2));
8// API çağrısı başarılı
9emit(PaymentSuccess('TXN12345'));
10} catch (e) {
11emit(PaymentFailure(e.toString()));
12}
13}
14}
1BlocBuilder<PaymentBloc, PaymentState>(
2builder: (context, state) {
3if (state is PaymentInitial) {
4return ElevatedButton(
5onPressed: () => context.read<PaymentBloc>().processPayment('100'),
6child: Text('Ödemeyi Başlat'),
7);
8} else if (state is PaymentLoading) {
9return CircularProgressIndicator();
10} else if (state is PaymentSuccess) {
11return Text('Ödeme Başarılı: ${state.transactionId}');
12} else if (state is PaymentFailure) {
13return Text('Hata: ${state.error}');
14}
15return SizedBox();
16},
17)

- Başlangıçta: "Ödemeyi Başlat" butonu
- Tıklanınca: Yükleme animasyonu
- 2 saniye sonra: "Ödeme Başarılı: TXN12345"

Durumlar açık ve izlenebilir
Geçişler mantıklı ve hatasız
Kod okunması kolay
Test etmesi basit

State Machine, özellikle ödeme, form, kimlik doğrulama gibi adımlı işlemlerde çok işe yarar.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz