Browse Source

[new]增加ios恢复订阅功能

zk 4 months ago
parent
commit
fda7b4e967

+ 42 - 1
lib/module/member/activity/member_activity_controller.dart

@@ -1,5 +1,6 @@
 import 'dart:io';
 import 'dart:io';
 
 
+import 'package:apple_pay/apple_pay.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
 import 'package:get/get.dart';
 import 'package:get/get_core/src/get_main.dart';
 import 'package:get/get_core/src/get_main.dart';
@@ -12,6 +13,7 @@ import '../../../data/bean/goods_bean.dart';
 import '../../../data/bean/member_status_info.dart';
 import '../../../data/bean/member_status_info.dart';
 import '../../../data/bean/pay_item_bean.dart';
 import '../../../data/bean/pay_item_bean.dart';
 import '../../../data/consts/web_url.dart';
 import '../../../data/consts/web_url.dart';
+import '../../../dialog/loading_dialog.dart';
 import '../../../handler/error_handler.dart';
 import '../../../handler/error_handler.dart';
 import '../../../helper/member_pay_helper.dart';
 import '../../../helper/member_pay_helper.dart';
 import '../../../resource/assets.gen.dart';
 import '../../../resource/assets.gen.dart';
@@ -119,7 +121,46 @@ class MemberActivityController extends BaseController {
     BrowserPage.start(WebUrl.renewalAgreement);
     BrowserPage.start(WebUrl.renewalAgreement);
   }
   }
 
 
-  void onRecoverClick() {}
+  void onRecoverClick() async {
+    if (payItemList.isNotEmpty) {
+      ToastUtil.show(StringName.memberActivityNoPayway);
+      return;
+    }
+    PayItemBean paymentWay = payItemList.first;
+
+    CustomLoadingDialog.show();
+
+    Future.delayed(const Duration(seconds: 20), () {
+      CustomLoadingDialog.hide();
+    });
+
+    final result = await ApplePay().restore();
+    if (result["success"] == true) {
+      var receipt = result['receipt'];
+      print('查找恢复记录成功: ${result['receipt']}');
+      checkRestoreStatus(receipt, paymentWay);
+    } else {
+      CustomLoadingDialog.hide();
+      ToastUtil.show("恢复失败");
+      print('恢复失败: ${result['error']}');
+    }
+  }
+
+  Future<void> checkRestoreStatus(
+      String? receiptData, PayItemBean paymentWay) async {
+    if (receiptData == null) {
+      return;
+    }
+    memberRepository.subscriptionResume(3, receiptData).then((data) async {
+      CustomLoadingDialog.hide();
+      ToastUtil.show("恢复成功");
+      await AccountRepository.getInstance().getMemberStatus();
+      Get.back();
+    }).catchError((error) {
+      CustomLoadingDialog.hide();
+      ToastUtil.show("恢复失败");
+    });
+  }
 
 
   @override
   @override
   void onClose() {
   void onClose() {

+ 27 - 19
lib/module/member/activity/member_activity_page.dart

@@ -79,26 +79,34 @@ class MemberActivityPage extends BasePage<MemberActivityController> {
                     fontWeight: FontWeight.bold),
                     fontWeight: FontWeight.bold),
               ),
               ),
             ),
             ),
-            Positioned(
-              right: 10.w,
-              top: 0,
-              bottom: 0,
-              child: GestureDetector(
-                onTap: controller.onRecoverClick,
-                child: Row(
-                  children: [
-                    Assets.images.iconAppleRecoverSubscribe
-                        .image(width: 14.w, height: 14.w),
-                    SizedBox(width: 1.w),
-                    Text(StringName.appleRecoverSubscribeTxt,
-                        style: TextStyle(
-                            fontSize: 11.sp,
-                            color: Colors.white,
-                            fontWeight: FontWeight.bold))
-                  ],
+            Obx(() {
+              return Visibility(
+                visible: Platform.isIOS &&
+                    controller.accountRepository.isLogin.value,
+                child: GestureDetector(
+                  child: Positioned(
+                    right: 10.w,
+                    top: 0,
+                    bottom: 0,
+                    child: GestureDetector(
+                      onTap: controller.onRecoverClick,
+                      child: Row(
+                        children: [
+                          Assets.images.iconAppleRecoverSubscribe
+                              .image(width: 14.w, height: 14.w),
+                          SizedBox(width: 1.w),
+                          Text(StringName.appleRecoverSubscribeTxt,
+                              style: TextStyle(
+                                  fontSize: 11.sp,
+                                  color: Colors.white,
+                                  fontWeight: FontWeight.bold))
+                        ],
+                      ),
+                    ),
+                  ),
                 ),
                 ),
-              ),
-            )
+              );
+            })
           ],
           ],
         ),
         ),
       ),
       ),

+ 0 - 16
pubspec.lock

@@ -420,22 +420,6 @@ packages:
       url: "https://pub.flutter-io.cn"
       url: "https://pub.flutter-io.cn"
     source: hosted
     source: hosted
     version: "1.0.0"
     version: "1.0.0"
-  flip_board:
-    dependency: "direct main"
-    description:
-      name: flip_board
-      sha256: "5b3bb7cebc7daa3b950be773a910cca40ff1516972dfb7dd4c5c5d58c94b4416"
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.0"
-  flip_panel_plus:
-    dependency: "direct main"
-    description:
-      name: flip_panel_plus
-      sha256: f4f31b7c1ecd4bcb3c2cc297c908b44a620c29dd57c9a3b7d5c82a48d2ae6018
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.0.0+3"
   flutter:
   flutter:
     dependency: "direct main"
     dependency: "direct main"
     description: flutter
     description: flutter