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 ediyor4success, // Başarılı5failure // Başarısız6}Her durumun kendi sınıfı olabilir (daha esnek):
1abstract class PaymentState {}23class 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());34Future<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.
0 yorum