some fix
# Conflicts: # lib/presentation/navigation/app_router.dart # pubspec.yaml
This commit is contained in:
81
lib/presentation/viewmodel/fine_payment_bloc.dart
Normal file
81
lib/presentation/viewmodel/fine_payment_bloc.dart
Normal file
@@ -0,0 +1,81 @@
|
||||
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(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user