60 lines
2.7 KiB
Dart
60 lines
2.7 KiB
Dart
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<VipProductModel?> 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));
|
|
}
|