82 lines
2.4 KiB
Dart
82 lines
2.4 KiB
Dart
import 'package:flutter_bloc/flutter_bloc.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<FinePaymentEvent, FinePaymentState> {
|
||
final GetFineDetailsUsecase getFineDetailsUsecase;
|
||
final PayFineUsecase payFineUsecase;
|
||
|
||
FinePaymentBloc({
|
||
required this.getFineDetailsUsecase,
|
||
required this.payFineUsecase,
|
||
}) : super(const FinePaymentState()) {
|
||
on<FetchFineDetails>(_onFetchFineDetails);
|
||
on<FinePaymentCardChanged>(_onCardChanged);
|
||
on<SelectFineBalancePressed>(_onSelectBalance);
|
||
on<PayFineSubmitted>(_onPayFineSubmitted);
|
||
}
|
||
|
||
Future<void> _onFetchFineDetails(
|
||
FetchFineDetails event,
|
||
Emitter<FinePaymentState> emit,
|
||
) async {
|
||
emit(state.copyWith(status: FinePaymentStatus.loading));
|
||
try {
|
||
final fine = await getFineDetailsUsecase(event.fineId);
|
||
// emit(state.copyWith(status: FinePaymentStatus.initial, fine: fine));
|
||
} catch (e) {
|
||
emit(
|
||
state.copyWith(
|
||
status: FinePaymentStatus.failure,
|
||
errorMessage: 'Не удалось загрузить данные о штрафе',
|
||
),
|
||
);
|
||
}
|
||
}
|
||
|
||
void _onCardChanged(
|
||
FinePaymentCardChanged event,
|
||
Emitter<FinePaymentState> emit,
|
||
) {
|
||
emit(state.copyWith(selectedCard: event.card, useBalance: false));
|
||
}
|
||
|
||
void _onSelectBalance(
|
||
SelectFineBalancePressed event,
|
||
Emitter<FinePaymentState> emit,
|
||
) {
|
||
emit(state.copyWith(useBalance: true, selectedCard: null));
|
||
}
|
||
|
||
Future<void> _onPayFineSubmitted(
|
||
PayFineSubmitted event,
|
||
Emitter<FinePaymentState> 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(),
|
||
),
|
||
);
|
||
}
|
||
}
|
||
}
|