# Conflicts:
#	lib/presentation/navigation/app_router.dart
#	pubspec.yaml
This commit is contained in:
2026-08-11 00:14:00 +03:00
parent c9b8d143d1
commit 182be1049b
351 changed files with 24566 additions and 22898 deletions

View File

@@ -1,198 +1,198 @@
import 'dart:async';
import 'package:be_happy/domain/usecase/add_payment_card_usecase.dart';
import 'package:be_happy/domain/usecase/get_profile_usecase.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../core/result.dart';
import '../../core/failures.dart';
import '../../domain/entities/payment_card.dart';
import '../../domain/usecase/get_payment_cards_usecase.dart';
import '../../domain/usecase/remove_payment_card_usecase.dart';
import '../../domain/usecase/set_main_payment_card_usecase.dart';
import '../event/payment_methods_event.dart';
import '../state/payment_methods_state.dart';
class PaymentMethodsBloc extends Bloc<PaymentMethodsEvent, PaymentMethodsState> {
final GetPaymentCardsUsecase _getPaymentCardsUsecase;
final RemovePaymentCardUsecase _removePaymentCardUsecase;
final SetMainPaymentCardUsecase _setMainPaymentCardUsecase;
final GetProfileUseCase _getProfileUseCase;
final AddPaymentCardUsecase _addPaymentCardUsecase;
PaymentMethodsBloc(
this._getPaymentCardsUsecase,
this._removePaymentCardUsecase,
this._setMainPaymentCardUsecase,
this._getProfileUseCase,
this._addPaymentCardUsecase,
) : super(PaymentMethodsState(status: PaymentMethodsStatus.initial)) {
on<PaymentMethodsStarted>(_onStarted);
on<PaymentMethodsDeleteCard>(_onDeleteCard);
on<PaymentMethodsSetMainCard>(_onSetMainCard);
on<AddPayemntCardPressed>(_onAddPayemntCardPressed);
}
Future<void> _onStarted(
PaymentMethodsStarted event,
Emitter<PaymentMethodsState> emit,
) async {
emit(state.copyWith(status: PaymentMethodsStatus.loading));
try {
final result = await _getPaymentCardsUsecase();
final profile = await _getProfileUseCase();
if (result is Success<List<PaymentCard>>) {
print("BALANCE: ${profile.balance} BYN");
emit(state.copyWith(
status: PaymentMethodsStatus.success,
cards: result.data ?? [],
balance: profile.balance,
));
} else if (result is Failure) {
String errorMessage = 'Не удалось загрузить карты';
/*if (result.failure is AuthFailure) {
errorMessage = 'Ошибка авторизации';
} else if (result.failure is UnknownFailure) {
errorMessage = result.failure.message ?? 'Неизвестная ошибка';
}*/
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: errorMessage,
));
}
} catch (e) {
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: e.toString(),
));
}
}
Future<void> _onDeleteCard(
PaymentMethodsDeleteCard event,
Emitter<PaymentMethodsState> emit,
) async {
emit(state.copyWith(
status: PaymentMethodsStatus.loading,
isDeleting: true,
));
try {
final result = await _removePaymentCardUsecase(event.cardId);
if (result is Success) {
emit(state.copyWith(isDeleting: false, status: PaymentMethodsStatus.success));
add(PaymentMethodsStarted());
} else if (result is Failure) {
String errorMessage = 'Не удалось удалить карту';
if (result.failure is AuthFailure) {
errorMessage = 'Ошибка авторизации';
} else if (result.failure is UnknownFailure) {
errorMessage = result.failure.message ?? 'Неизвестная ошибка';
}
emit(state.copyWith(
isDeleting: false,
errorMessage: errorMessage,
));
}
} catch (e) {
emit(state.copyWith(
isDeleting: false,
errorMessage: e.toString(),
));
}
}
Future<void> _onSetMainCard(
PaymentMethodsSetMainCard event,
Emitter<PaymentMethodsState> emit,
) async {
emit(state.copyWith(isSettingMain: true));
try {
final result = await _setMainPaymentCardUsecase(event.cardId);
if (result is Success) {
emit(state.copyWith(isSettingMain: false));
add(PaymentMethodsStarted());
} else if (result is Failure) {
String errorMessage = 'Не удалось установить основную карту';
if (result.failure is AuthFailure) {
errorMessage = 'Ошибка авторизации';
} else if (result.failure is UnknownFailure) {
errorMessage = result.failure.message ?? 'Неизвестная ошибка';
}
emit(state.copyWith(
isSettingMain: false,
errorMessage: errorMessage,
));
}
} catch (e) {
emit(state.copyWith(
isSettingMain: false,
errorMessage: e.toString(),
));
}
}
FutureOr<void> _onAddPayemntCardPressed(
AddPayemntCardPressed event,
Emitter<PaymentMethodsState> emit
) async {
emit(state.copyWith(status: PaymentMethodsStatus.loading));
try {
final result = await _addPaymentCardUsecase();
if (result is Success<Map<String, dynamic>>) {
final formUrlString = result.data?['formUrl'] as String?;
if (formUrlString != null && formUrlString.isNotEmpty) {
final url = Uri.parse(formUrlString);
if (await canLaunchUrl(url)) {
launchUrl(
url,
mode: LaunchMode.externalApplication,
);
emit(state.copyWith(status: PaymentMethodsStatus.success));
} else {
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: 'Не удалось открыть ссылку для оплаты',
));
}
} else {
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: 'Ссылка для привязки карты не получена от сервера',
));
}
} else if (result is Failure) {
String errorMessage = 'Ошибка при добавлении карты';
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: errorMessage,
));
}
} catch (e) {
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: e.toString(),
));
}
}}
import 'dart:async';
import 'package:be_happy/domain/usecase/add_payment_card_usecase.dart';
import 'package:be_happy/domain/usecase/get_profile_usecase.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../core/result.dart';
import '../../core/failures.dart';
import '../../domain/entities/payment_card.dart';
import '../../domain/usecase/get_payment_cards_usecase.dart';
import '../../domain/usecase/remove_payment_card_usecase.dart';
import '../../domain/usecase/set_main_payment_card_usecase.dart';
import '../event/payment_methods_event.dart';
import '../state/payment_methods_state.dart';
class PaymentMethodsBloc extends Bloc<PaymentMethodsEvent, PaymentMethodsState> {
final GetPaymentCardsUsecase _getPaymentCardsUsecase;
final RemovePaymentCardUsecase _removePaymentCardUsecase;
final SetMainPaymentCardUsecase _setMainPaymentCardUsecase;
final GetProfileUseCase _getProfileUseCase;
final AddPaymentCardUsecase _addPaymentCardUsecase;
PaymentMethodsBloc(
this._getPaymentCardsUsecase,
this._removePaymentCardUsecase,
this._setMainPaymentCardUsecase,
this._getProfileUseCase,
this._addPaymentCardUsecase,
) : super(PaymentMethodsState(status: PaymentMethodsStatus.initial)) {
on<PaymentMethodsStarted>(_onStarted);
on<PaymentMethodsDeleteCard>(_onDeleteCard);
on<PaymentMethodsSetMainCard>(_onSetMainCard);
on<AddPayemntCardPressed>(_onAddPayemntCardPressed);
}
Future<void> _onStarted(
PaymentMethodsStarted event,
Emitter<PaymentMethodsState> emit,
) async {
emit(state.copyWith(status: PaymentMethodsStatus.loading));
try {
final result = await _getPaymentCardsUsecase();
final profile = await _getProfileUseCase();
if (result is Success<List<PaymentCard>>) {
print("BALANCE: ${profile.balance} BYN");
emit(state.copyWith(
status: PaymentMethodsStatus.success,
cards: result.data ?? [],
balance: profile.balance,
));
} else if (result is Failure) {
String errorMessage = 'Не удалось загрузить карты';
/*if (result.failure is AuthFailure) {
errorMessage = 'Ошибка авторизации';
} else if (result.failure is UnknownFailure) {
errorMessage = result.failure.message ?? 'Неизвестная ошибка';
}*/
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: errorMessage,
));
}
} catch (e) {
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: e.toString(),
));
}
}
Future<void> _onDeleteCard(
PaymentMethodsDeleteCard event,
Emitter<PaymentMethodsState> emit,
) async {
emit(state.copyWith(
status: PaymentMethodsStatus.loading,
isDeleting: true,
));
try {
final result = await _removePaymentCardUsecase(event.cardId);
if (result is Success) {
emit(state.copyWith(isDeleting: false, status: PaymentMethodsStatus.success));
add(PaymentMethodsStarted());
} else if (result is Failure) {
String errorMessage = 'Не удалось удалить карту';
if (result.failure is AuthFailure) {
errorMessage = 'Ошибка авторизации';
} else if (result.failure is UnknownFailure) {
errorMessage = result.failure.message ?? 'Неизвестная ошибка';
}
emit(state.copyWith(
isDeleting: false,
errorMessage: errorMessage,
));
}
} catch (e) {
emit(state.copyWith(
isDeleting: false,
errorMessage: e.toString(),
));
}
}
Future<void> _onSetMainCard(
PaymentMethodsSetMainCard event,
Emitter<PaymentMethodsState> emit,
) async {
emit(state.copyWith(isSettingMain: true));
try {
final result = await _setMainPaymentCardUsecase(event.cardId);
if (result is Success) {
emit(state.copyWith(isSettingMain: false));
add(PaymentMethodsStarted());
} else if (result is Failure) {
String errorMessage = 'Не удалось установить основную карту';
if (result.failure is AuthFailure) {
errorMessage = 'Ошибка авторизации';
} else if (result.failure is UnknownFailure) {
errorMessage = result.failure.message ?? 'Неизвестная ошибка';
}
emit(state.copyWith(
isSettingMain: false,
errorMessage: errorMessage,
));
}
} catch (e) {
emit(state.copyWith(
isSettingMain: false,
errorMessage: e.toString(),
));
}
}
FutureOr<void> _onAddPayemntCardPressed(
AddPayemntCardPressed event,
Emitter<PaymentMethodsState> emit
) async {
emit(state.copyWith(status: PaymentMethodsStatus.loading));
try {
final result = await _addPaymentCardUsecase();
if (result is Success<Map<String, dynamic>>) {
final formUrlString = result.data?['formUrl'] as String?;
if (formUrlString != null && formUrlString.isNotEmpty) {
final url = Uri.parse(formUrlString);
if (await canLaunchUrl(url)) {
launchUrl(
url,
mode: LaunchMode.externalApplication,
);
emit(state.copyWith(status: PaymentMethodsStatus.success));
} else {
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: 'Не удалось открыть ссылку для оплаты',
));
}
} else {
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: 'Ссылка для привязки карты не получена от сервера',
));
}
} else if (result is Failure) {
String errorMessage = 'Ошибка при добавлении карты';
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: errorMessage,
));
}
} catch (e) {
emit(state.copyWith(
status: PaymentMethodsStatus.failure,
errorMessage: e.toString(),
));
}
}}