import 'package:eatvio_app/features/payment/presentation/widgets/promo_code_gate_bottom_sheet.dart'; import 'package:eatvio_app/features/payment/presentation/widgets/promo_code_modal.dart'; import 'package:eatvio_app/features/payment/presentation/widgets/sbp_banks_bottom_sheet.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; /// Оркестрирует флоу оплаты консультации: /// гейт «У вас есть промокод?» → (Да → форма промокода) → SbpBanks. Future showConsultationPaymentFlow( BuildContext context, { required int planId, Future Function(BuildContext)? showGate, Future Function(BuildContext, {Future Function(String)? onValidate})? showForm, Future Function(BuildContext, {required int planId})? showSbp, }) async { final gate = showGate ?? _showGate; final form = showForm ?? _showForm; final sbp = showSbp ?? _showSbp; final s = S.of(context); final gateChoice = await gate(context); if (gateChoice == null || !context.mounted) return; if (gateChoice) { final formResult = await form( context, onValidate: (_) async => PromoValidation.failure(s.promo_invalid), ); if (formResult == null || !context.mounted) return; } if (!context.mounted) return; await sbp(context, planId: planId); } Future _showGate(BuildContext context) { return showPromoCodeGateBottomSheet(context); } Future _showForm( BuildContext context, { Future Function(String)? onValidate, }) { return ItvioPromoCodeModal.show(context, onValidate: onValidate); } Future _showSbp(BuildContext context, {required int planId}) { return showSbpBanksBottomSheet(context, planId: planId); }