subscription_controller.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:video_player/video_player.dart';
  4. import '../../../../config/theme/dark_theme_colors.dart';
  5. import '../../../../config/translations/strings_enum.dart';
  6. import '../../../components/ix_snackbar.dart';
  7. import '../../../constants/assets.dart';
  8. class SubscriptionController extends GetxController {
  9. // 视频播放器控制器
  10. late VideoPlayerController videoController;
  11. final isVideoInitialized = false.obs;
  12. // 当前选中的订阅计划索引 (0: 年度, 1: 终身, 2: 月度, 3: 周度)
  13. final selectedPlanIndex = 0.obs;
  14. // 订阅计划列表
  15. List<Map<String, dynamic>> get plans => [
  16. {
  17. 'price': '\$40.00',
  18. 'period': Strings.perYear.tr,
  19. 'title': Strings.yearlyPlan.tr,
  20. 'badge': Strings.mostlyChoose.tr,
  21. 'badgeBgColor': DarkThemeColors.bg1,
  22. 'badgeTextColor': DarkThemeColors.subscriptionColor,
  23. 'badgeBorderColor': DarkThemeColors.dividerColor, // null 表示没有边框
  24. },
  25. {
  26. 'price': '\$58.00',
  27. 'period': Strings.once.tr,
  28. 'title': Strings.lifeTime.tr,
  29. 'badge': null,
  30. },
  31. {
  32. 'price': '\$58.00',
  33. 'period': Strings.perYear.tr,
  34. 'title': Strings.monthPlan.tr,
  35. 'badge': null,
  36. },
  37. {
  38. 'price': '\$1.00',
  39. 'period': Strings.perWeek.tr,
  40. 'title': Strings.weekPlan.tr,
  41. 'badge': Strings.limitedTime.tr,
  42. 'badgeBgColor': DarkThemeColors.primaryColor,
  43. 'badgeTextColor': Colors.white,
  44. 'badgeBorderColor': null,
  45. },
  46. ];
  47. @override
  48. void onInit() {
  49. super.onInit();
  50. _initializeVideoPlayer();
  51. }
  52. @override
  53. void onClose() {
  54. videoController.dispose();
  55. super.onClose();
  56. }
  57. // 初始化视频播放器
  58. void _initializeVideoPlayer() {
  59. videoController = VideoPlayerController.asset(Assets.subscriptionBg)
  60. ..initialize()
  61. .then((_) {
  62. isVideoInitialized.value = true;
  63. videoController.setLooping(true);
  64. videoController.setVolume(0); // 静音播放
  65. videoController.play();
  66. })
  67. .catchError((error) {
  68. print('视频初始化失败: $error');
  69. });
  70. }
  71. // 选择订阅计划
  72. void selectPlan(int index) {
  73. selectedPlanIndex.value = index;
  74. }
  75. // 确认变更
  76. void confirmChange() {
  77. // TODO: 实现确认订阅变更逻辑
  78. IXSnackBar.showIXSnackBar(
  79. title: Strings.success.tr,
  80. message: Strings.subscriptionChanged.tr,
  81. );
  82. }
  83. // 恢复购买
  84. void restorePurchases() {
  85. // TODO: 实现恢复购买逻辑
  86. IXSnackBar.showIXSnackBar(
  87. title: Strings.info.tr,
  88. message: Strings.restoringPurchases.tr,
  89. );
  90. }
  91. // 支付问题
  92. void handlePaymentIssue() {
  93. // TODO: 实现支付问题处理逻辑
  94. IXSnackBar.showIXSnackBar(
  95. title: Strings.info.tr,
  96. message: Strings.openingPaymentSupport.tr,
  97. );
  98. }
  99. }