import 'package:get/get.dart'; import 'package:hgdj/hj_model/splash/domain_source_model.dart'; import 'package:hgdj/tools_base/global_store/store.dart'; import '../../hj_page/main_page/provider/msg_provider.dart'; import '../../hj_page/mine/mine_vip/mine_charge_vip_page.dart'; import '../../hj_page/mine/mine_vip/pay_order_source.dart'; import '../../hj_page/mine/mine_vip/vip_product_manager.dart'; import '../../hj_page/mine/mine_vip/vip_support_model.dart'; import '../../tools_base/debug_log.dart'; import 'guide_config.dart'; import 'guide_manager.dart'; /// 付费引导弹窗的共用逻辑:取卡 / 场景来源 / 跳会员页 /// 弹窗前置校验都收在这里,返回 null 即不弹:productId、cover 缺任一或卡不在列表里 /// 都算配置有误,一律不弹、不做兜底回落。 /// 顺带备好卡数据(有缓存走缓存),播放页可提前调一次,别暂停后才拉数据白停几百毫秒 Future loadGuideCard(GuideScene scene) async { final config = GuideManager().configOf(scene); if (config == null) return null; // 开关关着 if (config.productId?.isNotEmpty != true || config.cover?.isNotEmpty != true) { debugLog('paymentGuide', '${scene.value} 缺 productId 或 cover,配置有误不弹'); return null; } if (vipProductManager.vipCards.isEmpty) await vipProductManager.loadVipCards(); final card = vipProductManager.vipCards .firstWhereOrNull((e) => e.productID == config.productId); if (card == null) debugLog( 'paymentGuide', '${scene.value} 配置的会员卡不在列表里,不弹: ${config.productId}'); return card; } /// 分层门槛:非 VIP + 未付费的 under7/over7 两档。只剩上新横幅在用,其余场景走开关 bool isUnpayGuideUser() { if (globalStore.isVIP) return false; final status = MineMsgProvider().payTier?.status; return status == PayTier.under7DayUnpay || status == PayTier.over7DayUnpay; } /// 场景 → 下单来源页(透传 /mine/topay 的 sourcePage) PaySourcePage guideSourcePage(GuideScene scene) => switch (scene) { GuideScene.homeNewUser || GuideScene.homeOldUser || GuideScene.homeNewUserFreeTrial => PaySourcePage.homeUserSegment, GuideScene.vipCenter => PaySourcePage.vipCenter, _ => PaySourcePage.videoBottomSheet, //播放页起播引导 / 返回挽留 }; /// 开通 → 关弹窗 + 进会员页并选中该卡(落地页 VIP_CENTER 开着还会再弹一次,不去重) void goVipDetail(VipProductModel card, {required PaySourcePage sourcePage}) { Get.back(result: true); // 带回"去开通了",调用方据此不恢复播放 Get.to( () => MineChargeVipPage(vipID: card.productID, sourcePage: sourcePage)); }