Compare commits
2 Commits
902c6d27a4
...
4a919a5bcc
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a919a5bcc | |||
| e91f373258 |
@@ -307,7 +307,7 @@ Future<void> setupDependencies() async {
|
|||||||
|
|
||||||
getIt.registerFactory<VerifyCodeBloc>(() => VerifyCodeBloc(getIt(), getIt(), getIt()));
|
getIt.registerFactory<VerifyCodeBloc>(() => VerifyCodeBloc(getIt(), getIt(), getIt()));
|
||||||
|
|
||||||
getIt.registerLazySingleton<ProfileBloc>(() => ProfileBloc(getIt(), getIt(), getIt()));
|
getIt.registerFactory<ProfileBloc>(() => ProfileBloc(getIt(), getIt(), getIt()));
|
||||||
|
|
||||||
getIt.registerFactory<EditProfileBloc>(
|
getIt.registerFactory<EditProfileBloc>(
|
||||||
() => EditProfileBloc(getIt(), getIt()),
|
() => EditProfileBloc(getIt(), getIt()),
|
||||||
@@ -337,7 +337,7 @@ Future<void> setupDependencies() async {
|
|||||||
|
|
||||||
|
|
||||||
getIt.registerFactory<PaymentMethodSheetBloc>(
|
getIt.registerFactory<PaymentMethodSheetBloc>(
|
||||||
() => PaymentMethodSheetBloc(getIt(), getIt(), getIt()),
|
() => PaymentMethodSheetBloc(getIt(), getIt(), getIt(), getIt()),
|
||||||
);
|
);
|
||||||
|
|
||||||
getIt.registerFactory<CurrentRidesBloc>(() => CurrentRidesBloc(getIt()));
|
getIt.registerFactory<CurrentRidesBloc>(() => CurrentRidesBloc(getIt()));
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import '../../../di/service_locator.dart';
|
|||||||
import '../../../domain/entities/payment_card.dart';
|
import '../../../domain/entities/payment_card.dart';
|
||||||
import '../../../domain/entities/scooter.dart';
|
import '../../../domain/entities/scooter.dart';
|
||||||
import '../../../domain/entities/tariff.dart';
|
import '../../../domain/entities/tariff.dart';
|
||||||
|
import '../../../domain/usecase/add_payment_card_usecase.dart';
|
||||||
import '../../../domain/usecase/get_payment_cards_usecase.dart';
|
import '../../../domain/usecase/get_payment_cards_usecase.dart';
|
||||||
import '../../../domain/usecase/get_profile_usecase.dart';
|
import '../../../domain/usecase/get_profile_usecase.dart';
|
||||||
import '../../../domain/usecase/set_main_payment_card_usecase.dart';
|
import '../../../domain/usecase/set_main_payment_card_usecase.dart';
|
||||||
@@ -322,6 +323,8 @@ class _TariffSheetState extends State<TariffSheet> {
|
|||||||
getIt<GetPaymentCardsUsecase>(),
|
getIt<GetPaymentCardsUsecase>(),
|
||||||
getIt<SetMainPaymentCardUsecase>(),
|
getIt<SetMainPaymentCardUsecase>(),
|
||||||
getIt<GetProfileUseCase>(),
|
getIt<GetProfileUseCase>(),
|
||||||
|
getIt<AddPaymentCardUsecase>(),
|
||||||
|
|
||||||
)..add(PaymentMethodSheetStarted()),
|
)..add(PaymentMethodSheetStarted()),
|
||||||
child: PaymentMethodSheet(
|
child: PaymentMethodSheet(
|
||||||
initialSelectedCard: state.useBalance ? null : state.selectedCard,
|
initialSelectedCard: state.useBalance ? null : state.selectedCard,
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ sealed class PaymentMethodSheetEvent {}
|
|||||||
|
|
||||||
class PaymentMethodSheetStarted extends PaymentMethodSheetEvent {}
|
class PaymentMethodSheetStarted extends PaymentMethodSheetEvent {}
|
||||||
|
|
||||||
|
class AddCardButtonPressed extends PaymentMethodSheetEvent {}
|
||||||
|
|
||||||
class SelectPaymentCardRequested extends PaymentMethodSheetEvent {
|
class SelectPaymentCardRequested extends PaymentMethodSheetEvent {
|
||||||
final PaymentCard card;
|
final PaymentCard card;
|
||||||
SelectPaymentCardRequested(this.card);
|
SelectPaymentCardRequested(this.card);
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ class AppRouter {
|
|||||||
getIt<GetPaymentCardsUsecase>(),
|
getIt<GetPaymentCardsUsecase>(),
|
||||||
getIt<SetMainPaymentCardUsecase>(),
|
getIt<SetMainPaymentCardUsecase>(),
|
||||||
getIt<GetProfileUseCase>(),
|
getIt<GetProfileUseCase>(),
|
||||||
|
getIt<AddPaymentCardUsecase>(),
|
||||||
),
|
),
|
||||||
child: PaymentMethodSheet(),
|
child: PaymentMethodSheet(),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import 'package:go_router/go_router.dart';
|
|||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
import '../../core/app_colors.dart';
|
import '../../core/app_colors.dart';
|
||||||
import '../../di/service_locator.dart';
|
|
||||||
import '../../domain/entities/user_profile.dart';
|
import '../../domain/entities/user_profile.dart';
|
||||||
import '../components/custom_app_bar.dart';
|
import '../components/custom_app_bar.dart';
|
||||||
import '../components/gradient_button.dart';
|
import '../components/gradient_button.dart';
|
||||||
@@ -107,7 +106,7 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (state.isSuccess) {
|
if (state.isSuccess) {
|
||||||
getIt<ProfileBloc>().add(ProfileUpdated());
|
context.read<ProfileBloc>().add(ProfileUpdated());
|
||||||
context.pop();
|
context.pop();
|
||||||
}
|
}
|
||||||
if (state.error != null) {
|
if (state.error != null) {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:be_happy/domain/usecase/add_payment_card_usecase.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
@@ -224,6 +225,7 @@ class _PaymentConfirmScreenContent extends StatelessWidget {
|
|||||||
getIt<GetPaymentCardsUsecase>(),
|
getIt<GetPaymentCardsUsecase>(),
|
||||||
getIt<SetMainPaymentCardUsecase>(),
|
getIt<SetMainPaymentCardUsecase>(),
|
||||||
getIt<GetProfileUseCase>(),
|
getIt<GetProfileUseCase>(),
|
||||||
|
getIt<AddPaymentCardUsecase>(),
|
||||||
)..add(PaymentMethodSheetStarted()),
|
)..add(PaymentMethodSheetStarted()),
|
||||||
child: PaymentMethodSheet(
|
child: PaymentMethodSheet(
|
||||||
initialSelectedCard: state.useBalance ? null : state.selectedCard,
|
initialSelectedCard: state.useBalance ? null : state.selectedCard,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:go_router/go_router.dart';
|
|||||||
import '../../core/app_colors.dart';
|
import '../../core/app_colors.dart';
|
||||||
import '../../di/service_locator.dart';
|
import '../../di/service_locator.dart';
|
||||||
import '../../domain/entities/payment_card.dart';
|
import '../../domain/entities/payment_card.dart';
|
||||||
|
import '../../domain/usecase/add_payment_card_usecase.dart';
|
||||||
import '../../domain/usecase/get_payment_cards_usecase.dart';
|
import '../../domain/usecase/get_payment_cards_usecase.dart';
|
||||||
import '../../domain/usecase/get_profile_usecase.dart';
|
import '../../domain/usecase/get_profile_usecase.dart';
|
||||||
import '../../domain/usecase/set_main_payment_card_usecase.dart';
|
import '../../domain/usecase/set_main_payment_card_usecase.dart';
|
||||||
@@ -172,6 +173,7 @@ class SubscriptionDetailsScreen extends StatelessWidget {
|
|||||||
getIt<GetPaymentCardsUsecase>(),
|
getIt<GetPaymentCardsUsecase>(),
|
||||||
getIt<SetMainPaymentCardUsecase>(),
|
getIt<SetMainPaymentCardUsecase>(),
|
||||||
getIt<GetProfileUseCase>(),
|
getIt<GetProfileUseCase>(),
|
||||||
|
getIt<AddPaymentCardUsecase>(),
|
||||||
)..add(PaymentMethodSheetStarted()),
|
)..add(PaymentMethodSheetStarted()),
|
||||||
child: const PaymentMethodSheet(showBalance: false),
|
child: const PaymentMethodSheet(showBalance: false),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import 'package:go_router/go_router.dart';
|
|||||||
import '../../core/app_colors.dart';
|
import '../../core/app_colors.dart';
|
||||||
import '../../di/service_locator.dart';
|
import '../../di/service_locator.dart';
|
||||||
import '../../domain/entities/payment_card.dart';
|
import '../../domain/entities/payment_card.dart';
|
||||||
|
import '../../domain/usecase/add_payment_card_usecase.dart';
|
||||||
import '../../domain/usecase/get_payment_cards_usecase.dart';
|
import '../../domain/usecase/get_payment_cards_usecase.dart';
|
||||||
import '../../domain/usecase/get_profile_usecase.dart';
|
import '../../domain/usecase/get_profile_usecase.dart';
|
||||||
import '../../domain/usecase/set_main_payment_card_usecase.dart';
|
import '../../domain/usecase/set_main_payment_card_usecase.dart';
|
||||||
@@ -196,6 +197,7 @@ class TopUpScreen extends StatelessWidget {
|
|||||||
getIt<GetPaymentCardsUsecase>(),
|
getIt<GetPaymentCardsUsecase>(),
|
||||||
getIt<SetMainPaymentCardUsecase>(),
|
getIt<SetMainPaymentCardUsecase>(),
|
||||||
getIt<GetProfileUseCase>(),
|
getIt<GetProfileUseCase>(),
|
||||||
|
getIt<AddPaymentCardUsecase>(),
|
||||||
)..add(PaymentMethodSheetStarted()),
|
)..add(PaymentMethodSheetStarted()),
|
||||||
child: const PaymentMethodSheet(showBalance: false),
|
child: const PaymentMethodSheet(showBalance: false),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,27 +1,36 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
import '../../core/result.dart';
|
import '../../core/result.dart';
|
||||||
import '../../domain/entities/payment_card.dart';
|
import '../../domain/entities/payment_card.dart';
|
||||||
|
import '../../domain/usecase/add_payment_card_usecase.dart';
|
||||||
import '../../domain/usecase/get_payment_cards_usecase.dart';
|
import '../../domain/usecase/get_payment_cards_usecase.dart';
|
||||||
import '../../domain/usecase/get_profile_usecase.dart';
|
import '../../domain/usecase/get_profile_usecase.dart';
|
||||||
import '../../domain/usecase/set_main_payment_card_usecase.dart';
|
import '../../domain/usecase/set_main_payment_card_usecase.dart';
|
||||||
import '../event/payment_method_sheet_event.dart';
|
import '../event/payment_method_sheet_event.dart';
|
||||||
import '../state/payment_method_sheet_state.dart';
|
import '../state/payment_method_sheet_state.dart';
|
||||||
|
|
||||||
class PaymentMethodSheetBloc extends Bloc<PaymentMethodSheetEvent, PaymentMethodSheetState> {
|
class PaymentMethodSheetBloc
|
||||||
|
extends Bloc<PaymentMethodSheetEvent, PaymentMethodSheetState> {
|
||||||
final GetPaymentCardsUsecase _getPaymentCardsUsecase;
|
final GetPaymentCardsUsecase _getPaymentCardsUsecase;
|
||||||
final GetProfileUseCase _getProfileUseCase;
|
final GetProfileUseCase _getProfileUseCase;
|
||||||
final SetMainPaymentCardUsecase _setMainPaymentCardUsecase;
|
final SetMainPaymentCardUsecase _setMainPaymentCardUsecase;
|
||||||
|
final AddPaymentCardUsecase _addPaymentCardUsecase;
|
||||||
|
|
||||||
PaymentMethodSheetBloc(this._getPaymentCardsUsecase, this._setMainPaymentCardUsecase, this._getProfileUseCase)
|
|
||||||
: super(PaymentMethodSheetState(status: PaymentMethodSheetStatus.initial)) {
|
PaymentMethodSheetBloc(this._getPaymentCardsUsecase,
|
||||||
|
this._setMainPaymentCardUsecase, this._getProfileUseCase,
|
||||||
|
this._addPaymentCardUsecase)
|
||||||
|
: super(
|
||||||
|
PaymentMethodSheetState(status: PaymentMethodSheetStatus.initial)) {
|
||||||
on<PaymentMethodSheetStarted>(_onStarted);
|
on<PaymentMethodSheetStarted>(_onStarted);
|
||||||
|
on<AddCardButtonPressed>(_onAddCardButtonPressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _onStarted(
|
Future<void> _onStarted(PaymentMethodSheetStarted event,
|
||||||
PaymentMethodSheetStarted event,
|
Emitter<PaymentMethodSheetState> emit,) async {
|
||||||
Emitter<PaymentMethodSheetState> emit,
|
|
||||||
) async {
|
|
||||||
emit(state.copyWith(status: PaymentMethodSheetStatus.loading));
|
emit(state.copyWith(status: PaymentMethodSheetStatus.loading));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -48,10 +57,9 @@ class PaymentMethodSheetBloc extends Bloc<PaymentMethodSheetEvent, PaymentMethod
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Future<void> _onSelectCard(
|
|
||||||
SelectPaymentCardRequested event,
|
Future<void> _onSelectCard(SelectPaymentCardRequested event,
|
||||||
Emitter<PaymentMethodSheetState> emit,
|
Emitter<PaymentMethodSheetState> emit,) async {
|
||||||
) async {
|
|
||||||
// Включаем локальный лоадер на шторке, либо просто ждем ответа
|
// Включаем локальный лоадер на шторке, либо просто ждем ответа
|
||||||
emit(state.copyWith(status: PaymentMethodSheetStatus.loading));
|
emit(state.copyWith(status: PaymentMethodSheetStatus.loading));
|
||||||
|
|
||||||
@@ -65,7 +73,8 @@ class PaymentMethodSheetBloc extends Bloc<PaymentMethodSheetEvent, PaymentMethod
|
|||||||
cards: cardsResult.data ?? [],
|
cards: cardsResult.data ?? [],
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
emit(state.copyWith(status: PaymentMethodSheetStatus.failure, errorMessage: 'Ошибка обновления списка карт'));
|
emit(state.copyWith(status: PaymentMethodSheetStatus.failure,
|
||||||
|
errorMessage: 'Ошибка обновления списка карт'));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
emit(state.copyWith(
|
emit(state.copyWith(
|
||||||
@@ -97,4 +106,50 @@ class PaymentMethodSheetBloc extends Bloc<PaymentMethodSheetEvent, PaymentMethod
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FutureOr<void> _onAddCardButtonPressed(AddCardButtonPressed event,
|
||||||
|
Emitter<PaymentMethodSheetState> emit) async {
|
||||||
|
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: PaymentMethodSheetStatus.success));
|
||||||
|
} else {
|
||||||
|
emit(state.copyWith(
|
||||||
|
status: PaymentMethodSheetStatus.failure,
|
||||||
|
errorMessage: 'Не удалось открыть ссылку для оплаты',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
emit(state.copyWith(
|
||||||
|
status: PaymentMethodSheetStatus.failure,
|
||||||
|
errorMessage: 'Ссылка для привязки карты не получена от сервера',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
} else if (result is Failure) {
|
||||||
|
String errorMessage = 'Ошибка при добавлении карты';
|
||||||
|
|
||||||
|
emit(state.copyWith(
|
||||||
|
status: PaymentMethodSheetStatus.failure,
|
||||||
|
errorMessage: errorMessage,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
emit(state.copyWith(
|
||||||
|
status: PaymentMethodSheetStatus.failure,
|
||||||
|
errorMessage: e.toString(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user