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

@@ -192,13 +192,18 @@ class _PaymentMethodSheetState extends State<PaymentMethodSheet> {
return Padding(
padding: const EdgeInsets.only(bottom: 12),
child: PaymentOption(
title: card.type,
subtitle: '****${card.cardLastNumber}',
title: card.isMain ? "Основная" : "",
subtitle: '${card.cardLastNumber}',
isSelected: _selectedPaymentMethod == index,
onTap: () {
onTap: () async {
setState(() {
_selectedPaymentMethod = index;
});
context.read<PaymentMethodSheetBloc>().add(
SelectPaymentCardRequested(card),
);
Navigator.pop(context, card);
},
),

View File

@@ -151,6 +151,7 @@ class _ScooterBottomSheetState extends State<ScooterBottomSheet> {
child: _ScooterCard(
scooter: scooter,
isActive: isActive,
address: state.address ?? "Unknown address",
),
),
),
@@ -174,9 +175,10 @@ class _ScooterBottomSheetState extends State<ScooterBottomSheet> {
class _ScooterCard extends StatelessWidget {
final Scooter scooter;
final String address;
final bool isActive;
const _ScooterCard({required this.scooter, required this.isActive});
const _ScooterCard({required this.scooter, required this.isActive, required this.address});
@override
Widget build(BuildContext context) {
@@ -210,7 +212,9 @@ class _ScooterCard extends StatelessWidget {
),
const SizedBox(width: 6),
Text(
"${(scooter.distance?.toInt()) ?? 0}m",
(scooter.distance?.toInt() ?? 0) >= 1000
? '${((scooter.distance?.toInt() ?? 0) / 1000).toStringAsFixed(1)} km'
: '${scooter.distance?.toInt() ?? 0} m',
style: const TextStyle(color: Colors.white, fontSize: 14),
),
],
@@ -262,7 +266,7 @@ class _ScooterCard extends StatelessWidget {
width: double.infinity,
fontSize: 12,
onTap: () {
Navigator.pop(context, scooter);
Navigator.pop(context, [scooter, address]);
},
),
],

View File

@@ -12,6 +12,7 @@ import '../../../domain/entities/payment_card.dart';
import '../../../domain/entities/scooter.dart';
import '../../../domain/entities/tariff.dart';
import '../../../domain/usecase/get_payment_cards_usecase.dart';
import '../../../domain/usecase/set_main_payment_card_usecase.dart';
import '../../event/payment_method_sheet_event.dart';
import '../../event/tariff_sheet_event.dart';
import '../../state/tariff_sheet_state.dart';
@@ -288,10 +289,10 @@ class _TariffSheetState extends State<TariffSheet> {
child: PaymentOption(
title: state.useBalance
? 'Баланс'
: state.selectedCard!.type,
: "Карта",
subtitle: state.useBalance
? '${state.userBalance.toStringAsFixed(2)} BYN'
: '****${state.selectedCard!.cardLastNumber}',
: '${state.selectedCard!.cardLastNumber}',
isSelected: true,
onTap: () async {
final result = await showModalBottomSheet<dynamic>(
@@ -301,6 +302,7 @@ class _TariffSheetState extends State<TariffSheet> {
builder: (innerContext) => BlocProvider(
create: (context) => PaymentMethodSheetBloc(
getIt<GetPaymentCardsUsecase>(),
getIt<SetMainPaymentCardUsecase>(),
)..add(PaymentMethodSheetStarted()),
child: PaymentMethodSheet(
initialSelectedCard: state.useBalance ? null : state.selectedCard,
@@ -381,7 +383,6 @@ class _TariffSheetState extends State<TariffSheet> {
const SizedBox(height: 12),
// 🔹 КНОПКА "ЗАБРОНИРОВАТЬ"
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: GradientButton(
@@ -494,13 +495,10 @@ class _TariffCard extends StatelessWidget {
overflow: TextOverflow.ellipsis,
),
),
// Резервируем место под иконку инфо справа,
// чтобы текст не залез под неё
const SizedBox(width: 24),
],
),
const SizedBox(height: 12),
// Цена + текст рядом
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
@@ -540,7 +538,6 @@ class _TariffCard extends StatelessWidget {
],
),
// Кнопка-иконка в верхнем правом углу
Positioned(
top: 0,
right: 0,