Files
be_happy_public/lib/presentation/viewmodel/fine_payment_bloc.dart
Polyanka 182be1049b some fix
# Conflicts:
#	lib/presentation/navigation/app_router.dart
#	pubspec.yaml
2026-08-11 00:23:16 +03:00

82 lines
2.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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