import 'package:flutter_bloc/flutter_bloc.dart'; import '../../core/result.dart';import '../../domain/entities/fine.dart'; import '../../domain/usecase/get_fine_details_usecase.dart'; import '../../domain/usecase/pay_fine_usecase.dart'; import '../event/fine_payment_event.dart'; import '../state/fine_payment_state.dart'; class FinePaymentBloc extends Bloc { final GetFineDetailsUsecase getFineDetailsUsecase; final PayFineUsecase payFineUsecase; FinePaymentBloc({ required this.getFineDetailsUsecase, required this.payFineUsecase, }) : super(const FinePaymentState()) { on(_onFetchFineDetails); on(_onCardChanged); on(_onSelectBalance); on(_onPayFineSubmitted); } Future _onFetchFineDetails( FetchFineDetails event, Emitter emit, ) async { emit(state.copyWith(status: FinePaymentStatus.loading)); try { final result = await getFineDetailsUsecase(event.fineId); // Возвращает Result // Распаковываем Result if (result is Success) { final fine = result.data; // Fine? if (fine != null) { emit(state.copyWith( status: FinePaymentStatus.initial, fine: fine, )); } else { emit( state.copyWith( status: FinePaymentStatus.failure, errorMessage: "Не удалось получить данные о штрафе", ), ); } } else if (result is Failure) { emit( state.copyWith( status: FinePaymentStatus.failure, errorMessage: result.failure.toString(), // или конкретное сообщение ), ); } } catch (e) { emit( state.copyWith( status: FinePaymentStatus.failure, errorMessage: 'Не удалось загрузить данные о штрафе', ), ); } } void _onCardChanged( FinePaymentCardChanged event, Emitter emit, ) { emit(state.copyWith(selectedCard: event.card, useBalance: false)); } void _onSelectBalance( SelectFineBalancePressed event, Emitter emit, ) { emit(state.copyWith(useBalance: true, selectedCard: null)); } Future _onPayFineSubmitted( PayFineSubmitted event, Emitter emit, ) async { if (state.fine == null) return; emit(state.copyWith(status: FinePaymentStatus.loading)); try { await payFineUsecase( orderId: state.fine!.id, cardId: state.useBalance ? null : state.selectedCard?.id, isBalance: state.useBalance, ); emit( state.copyWith( status: FinePaymentStatus.success, paymentCompleted: true, ), ); } catch (e) { emit( state.copyWith( status: FinePaymentStatus.failure, errorMessage: e.toString(), ), ); } } }