This commit is contained in:
2026-07-08 13:09:20 +03:00
parent b9da1d3064
commit 9eda119527
42 changed files with 830 additions and 279 deletions

View File

@@ -1,5 +1,6 @@
import 'dart:async';
import 'package:be_happy/presentation/screens/card_binding_result_screen.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:be_happy/core/app_colors.dart';
import 'package:be_happy/di/service_locator.dart';
@@ -43,6 +44,7 @@ import 'package:path/path.dart';
import '../../domain/entities/scooter.dart';
import '../../domain/usecase/activate_subscription_usecase.dart';
import '../../domain/usecase/add_payment_card_usecase.dart';
import '../../domain/usecase/book_scooter_usecase.dart';
import '../../domain/usecase/create_pin_usecase.dart';
import '../../domain/usecase/get_address_by_point_usecase.dart';
@@ -139,7 +141,8 @@ class AppRouter {
createPinUseCase: getIt<CreatePinUseCase>(),
verifyPinUsecase: getIt<VerifyPinUseCase>(),
isPinSetUsecase: getIt<IsPinSetUsecase>(),
)..add(PinScreenStarted()),
)
..add(PinScreenStarted()),
child: const PinLoginScreen(),
)
),
@@ -151,6 +154,26 @@ class AppRouter {
path: '/license-agreement',
builder: (context, state) => const LicenseAgreementScreen(),
),
GoRoute(
path: '/card-result',
builder: (context, state) {
final modeParam = state.uri.queryParameters['status'];
CardBindingStatus status = CardBindingStatus.success;
String title = 'Карта успешно\nпривязана!';
if (modeParam == 'failed') {
status = CardBindingStatus.failed;
title = 'Извините, что-то\nпошло не так';
}
return CardBindingResultScreen(
status: status,
title: title,
cardImagePath: 'assets/icons/card_result_screen.png',
);
},
),
GoRoute(
path: '/home',
builder: (context, state) => const MapScreen(),
@@ -237,7 +260,8 @@ class AppRouter {
type: MaterialType.transparency,
child: BlocProvider(
create: (context) =>
PaymentMethodSheetBloc(getIt<GetPaymentCardsUsecase>()),
PaymentMethodSheetBloc(getIt<GetPaymentCardsUsecase>(),
getIt<SetMainPaymentCardUsecase>()),
child: PaymentMethodSheet(),
),
),
@@ -297,12 +321,14 @@ class AppRouter {
],
),
GoRoute(
path: 'scooter/:id',
builder: (context, state) =>
BlocProvider(
path: 'scooter/:id',
builder: (context, state) {
String address = state.extra as String;
return BlocProvider(
create: (context) => getIt<ScooterDetailBloc>(),
child: ScooterDetailScreen(),
),
child: ScooterDetailScreen(address: address),
);
}
),
GoRoute(
path: 'order-photos/:orderId',
@@ -371,6 +397,7 @@ class AppRouter {
create: (context) =>
SubscriptionDetailsBloc(
getIt<GetSubscriptionByIdUsecase>(),
getIt<GetPaymentCardsUsecase>(),
getIt<ActivateSubscriptionUsecase>(),
getIt<GetClientSubscriptionsUsecase>(),
)
@@ -394,24 +421,26 @@ class AppRouter {
builder: (context, state) => const NewsScreen(),
),
GoRoute(
path: 'qr-info',
builder: (context, state) => const QRScanInfoScreen(),
routes: [
GoRoute(
path: 'qr-scan',
builder: (context, state) => const QrScanScreen(),
),
GoRoute(
path: 'qr-input',
builder: (context, state) => BlocProvider(
create: (context) =>
ScooterCodeBloc(
getScooterByTitleUsecase: getIt<GetScooterByTitleUsecase>(),
),
child: ScooterCodeInputScreen(),
path: 'qr-info',
builder: (context, state) => const QRScanInfoScreen(),
routes: [
GoRoute(
path: 'qr-scan',
builder: (context, state) => const QrScanScreen(),
),
),
]
GoRoute(
path: 'qr-input',
builder: (context, state) =>
BlocProvider(
create: (context) =>
ScooterCodeBloc(
getScooterByTitleUsecase: getIt<
GetScooterByTitleUsecase>(),
),
child: ScooterCodeInputScreen(),
),
),
]
),
GoRoute(
path: 'payment-methods',
@@ -423,6 +452,7 @@ class AppRouter {
getIt<RemovePaymentCardUsecase>(),
getIt<SetMainPaymentCardUsecase>(),
getIt<GetProfileUseCase>(),
getIt<AddPaymentCardUsecase>(),
)
..add(PaymentMethodsStarted()),
child: PaymentMethodsScreen(),
@@ -454,9 +484,9 @@ class AppRouter {
],
),
GoRoute(
path: 'order-history',
builder: (context, state) => const OrderHistoryScreen(),
routes: []
path: 'order-history',
builder: (context, state) => const OrderHistoryScreen(),
routes: []
),
GoRoute(
path: 'notifications',
@@ -466,6 +496,24 @@ class AppRouter {
),
],
onException: (context, state, router) {
final location = state.uri.toString();
if (location.startsWith('com.behappy.app://')) {
String normalizedPath = location
.replaceFirst('com.behappy.app://', '/')
.replaceAll('/?', '?')
.replaceAll(' ', '');
print("Нормализованный путь диплинка: $normalizedPath");
router.go(normalizedPath);
} else {
print('GoRouter Exception: ${state.error}');
}
},
observers: [BotToastNavigatorObserver()],
redirect: (BuildContext context, GoRouterState state) {