fix payment card change. fix adding a new payment card

This commit is contained in:
2026-07-13 15:46:34 +03:00
parent e91f373258
commit a6e8b9d070
10 changed files with 55 additions and 144 deletions

View File

@@ -1,5 +1,3 @@
import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:url_launcher/url_launcher.dart';
@@ -12,25 +10,23 @@ import '../../domain/usecase/set_main_payment_card_usecase.dart';
import '../event/payment_method_sheet_event.dart';
import '../state/payment_method_sheet_state.dart';
class PaymentMethodSheetBloc
extends Bloc<PaymentMethodSheetEvent, PaymentMethodSheetState> {
class PaymentMethodSheetBloc extends Bloc<PaymentMethodSheetEvent, PaymentMethodSheetState> {
final GetPaymentCardsUsecase _getPaymentCardsUsecase;
final GetProfileUseCase _getProfileUseCase;
final SetMainPaymentCardUsecase _setMainPaymentCardUsecase;
final AddPaymentCardUsecase _addPaymentCardUsecase;
PaymentMethodSheetBloc(this._getPaymentCardsUsecase,
this._setMainPaymentCardUsecase, this._getProfileUseCase,
this._addPaymentCardUsecase)
: super(
PaymentMethodSheetState(status: PaymentMethodSheetStatus.initial)) {
PaymentMethodSheetBloc(this._getPaymentCardsUsecase, this._setMainPaymentCardUsecase, this._getProfileUseCase, this._addPaymentCardUsecase)
: super(PaymentMethodSheetState(status: PaymentMethodSheetStatus.initial)) {
on<PaymentMethodSheetStarted>(_onStarted);
on<AddCardButtonPressed>(_onAddCardButtonPressed);
on<SelectPaymentCardRequested>(_onSelectCard);
on<AddPaymentCardRequested>(_onAddPaymentCardRequested);
}
Future<void> _onStarted(PaymentMethodSheetStarted event,
Emitter<PaymentMethodSheetState> emit,) async {
Future<void> _onStarted(
PaymentMethodSheetStarted event,
Emitter<PaymentMethodSheetState> emit,
) async {
emit(state.copyWith(status: PaymentMethodSheetStatus.loading));
try {
@@ -57,10 +53,10 @@ class PaymentMethodSheetBloc
));
}
}
Future<void> _onSelectCard(SelectPaymentCardRequested event,
Emitter<PaymentMethodSheetState> emit,) async {
// Включаем локальный лоадер на шторке, либо просто ждем ответа
Future<void> _onSelectCard(
SelectPaymentCardRequested event,
Emitter<PaymentMethodSheetState> emit,
) async {
emit(state.copyWith(status: PaymentMethodSheetStatus.loading));
final result = await _setMainPaymentCardUsecase(event.card.id);
@@ -73,8 +69,7 @@ class PaymentMethodSheetBloc
cards: cardsResult.data ?? [],
));
} else {
emit(state.copyWith(status: PaymentMethodSheetStatus.failure,
errorMessage: 'Ошибка обновления списка карт'));
emit(state.copyWith(status: PaymentMethodSheetStatus.failure, errorMessage: 'Ошибка обновления списка карт'));
}
} else {
emit(state.copyWith(
@@ -84,7 +79,6 @@ class PaymentMethodSheetBloc
}
}
// Выносим загрузку в отдельный метод для переиспользования
Future<void> _loadCards(Emitter<PaymentMethodSheetState> emit) async {
try {
final result = await _getPaymentCardsUsecase();
@@ -107,8 +101,12 @@ class PaymentMethodSheetBloc
}
}
FutureOr<void> _onAddCardButtonPressed(AddCardButtonPressed event,
Emitter<PaymentMethodSheetState> emit) async {
Future<void> _onAddPaymentCardRequested(
AddPaymentCardRequested event,
Emitter<PaymentMethodSheetState> emit,
) async {
emit(state.copyWith(status: PaymentMethodSheetStatus.loading));
try {
final result = await _addPaymentCardUsecase();
@@ -118,9 +116,8 @@ class PaymentMethodSheetBloc
if (formUrlString != null && formUrlString.isNotEmpty) {
final url = Uri.parse(formUrlString);
if (await canLaunchUrl(url)
) {
launchUrl(
if (await canLaunchUrl(url)) {
await launchUrl(
url,
mode: LaunchMode.externalApplication,
);
@@ -138,11 +135,9 @@ class PaymentMethodSheetBloc
));
}
} else if (result is Failure) {
String errorMessage = 'Ошибка при добавлении карты';
emit(state.copyWith(
status: PaymentMethodSheetStatus.failure,
errorMessage: errorMessage,
errorMessage: 'Ошибка при добавлении карты',
));
}
} catch (e) {