new_discount_controller.dart 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. import 'dart:io';
  2. import 'package:agile_pay/flutter_pay.dart';
  3. import 'package:apple_pay/apple_pay.dart';
  4. import 'package:carousel_slider/carousel_controller.dart';
  5. import 'package:carousel_slider/carousel_options.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:injectable/injectable.dart';
  8. import 'package:keyboard/base/base_controller.dart';
  9. import 'package:get/get.dart';
  10. import 'package:keyboard/data/bean/character_info.dart';
  11. import 'package:keyboard/data/repository/config_repository.dart';
  12. import 'package:keyboard/module/login/login_page.dart';
  13. import 'package:keyboard/module/store/new_discount/member_card_bean.dart';
  14. import 'package:keyboard/utils/method_chanel_ios_util.dart';
  15. import 'package:keyboard/widget/platform_util.dart';
  16. import '../../../data/api/response/user_info_response.dart';
  17. import '../../../data/bean/goods_info.dart';
  18. import '../../../data/bean/member_info.dart';
  19. import '../../../data/bean/pay_way_info.dart';
  20. import '../../../data/bean/wechat_payment_sign_bean.dart';
  21. import '../../../data/consts/constants.dart';
  22. import '../../../data/consts/error_code.dart';
  23. import '../../../data/consts/payment_type.dart';
  24. import '../../../data/repository/account_repository.dart';
  25. import '../../../data/repository/store_repository.dart';
  26. import '../../../dialog/alipay_qr_code_dialog.dart';
  27. import '../../../dialog/loading_dialog.dart';
  28. import '../../../dialog/login/login_dialog.dart';
  29. import '../../../dialog/member_agreement_dialog.dart';
  30. import '../../../dialog/payment_fail_dialog.dart';
  31. import '../../../dialog/payment_success_dialog.dart';
  32. import '../../../dialog/wechat_qr_code_dialog.dart';
  33. import '../../../resource/assets.gen.dart';
  34. import '../../../resource/string.gen.dart';
  35. import '../../../utils/async_util.dart';
  36. import '../../../utils/atmob_log.dart';
  37. import '../../../utils/date_util.dart';
  38. import '../../../utils/error_handler.dart';
  39. import '../../../utils/http_handler.dart';
  40. import '../../../utils/payment_status_manager.dart';
  41. import '../../../utils/toast_util.dart';
  42. import '../store_banner_bean.dart';
  43. import '../subscribe/recover_subscribe_dialog.dart';
  44. import '../suprise/surprise_dialog.dart';
  45. import '../ticket/discount_ticket_dialog.dart';
  46. import 'new_discount_page.dart';
  47. @injectable
  48. class NewDiscountController extends BaseController
  49. implements PaymentStatusCallback {
  50. final String tag = "NewDiscountController";
  51. final StoreRepository storeRepository;
  52. final AccountRepository accountRepository;
  53. final ConfigRepository configRepository;
  54. final PaymentStatusManager paymentStatusManager;
  55. RxList<GoodsInfo> get goodsInfoList =>
  56. storeRepository.newDiscountGoodsInfoList;
  57. RxList<PayWayInfo> get payWayList => storeRepository.newDiscountPayWayList;
  58. final Rxn<GoodsInfo> _selectedGoodsInfoItem = Rxn<GoodsInfo>();
  59. GoodsInfo? get selectedGoodsInfoItem => _selectedGoodsInfoItem.value;
  60. final Rxn<PayWayInfo> _selectedPayWay = Rxn<PayWayInfo>();
  61. PayWayInfo? get selectedPayWay => _selectedPayWay.value;
  62. CancelableFuture? _storeDataFuture;
  63. bool get isLogin => accountRepository.isLogin.value;
  64. final isAgree = false.obs;
  65. MemberInfo? get memberStatusInfo => accountRepository.memberStatusInfo.value;
  66. UserInfoResponse? get userInfo => accountRepository.userInfo.value;
  67. final RxList<GoodsInfo> filteredGoodsList = <GoodsInfo>[].obs;
  68. RxList<CharacterInfo> get _charactersList => storeRepository.charactersList;
  69. List<CharacterInfo> get charactersList => _charactersList;
  70. final CarouselSliderController carouselSliderController =
  71. CarouselSliderController();
  72. final RxInt _currentBanner = 0.obs;
  73. int get currentBannerIndex => _currentBanner.value;
  74. late final RxBool isDiscount = false.obs;
  75. /// 轮播图控制器
  76. final List<AssetGenImage> bannerList = [
  77. Assets.images.iconNewDiscountBanner1,
  78. Assets.images.iconNewDiscountBanner2,
  79. Assets.images.iconNewDiscountBanner3,
  80. ];
  81. final List<MemberCardBean> memberCardList = [
  82. MemberCardBean(
  83. imageUrl: Assets.images.iconNewDiscountMembershipCard1,
  84. title: StringName.newDiscountMemberCard1Title,
  85. desc: StringName.newDiscountMemberCard1Desc,
  86. gradient: LinearGradient(
  87. begin: Alignment(0.50, -0.00),
  88. end: Alignment(0.50, 1.00),
  89. colors: [const Color(0xFFF1EDFF), const Color(0xFFFAF8FF)],
  90. ),
  91. ),
  92. MemberCardBean(
  93. imageUrl: Assets.images.iconNewDiscountMembershipCard2,
  94. title: StringName.newDiscountMemberCard2Title,
  95. desc: StringName.newDiscountMemberCard2Desc,
  96. gradient: LinearGradient(
  97. begin: Alignment(0.50, -0.00),
  98. end: Alignment(0.50, 1.00),
  99. colors: [const Color(0xFFDCF4C0), const Color(0xFFFAFFF3)],
  100. ),
  101. ),
  102. MemberCardBean(
  103. imageUrl: Assets.images.iconNewDiscountMembershipCard3,
  104. title: StringName.newDiscountMemberCard3Title,
  105. desc: StringName.newDiscountMemberCard3Desc,
  106. gradient: LinearGradient(
  107. begin: Alignment(0.50, -0.00),
  108. end: Alignment(0.50, 1.00),
  109. colors: [const Color(0xFFF9DBFF), const Color(0xFFFFFBFE)],
  110. ),
  111. ),
  112. MemberCardBean(
  113. imageUrl: Assets.images.iconNewDiscountMembershipCard4,
  114. title: StringName.newDiscountMemberCard4Title,
  115. desc: StringName.newDiscountMemberCard4Desc,
  116. gradient: LinearGradient(
  117. begin: Alignment(0.50, -0.00),
  118. end: Alignment(0.50, 1.00),
  119. colors: [const Color(0xFFDBECFF), const Color(0xFFFBFBFF)],
  120. ),
  121. ),
  122. MemberCardBean(
  123. imageUrl: Assets.images.iconNewDiscountMembershipCard5,
  124. title: StringName.newDiscountMemberCard5Title,
  125. desc: StringName.newDiscountMemberCard5Desc,
  126. gradient: LinearGradient(
  127. begin: Alignment(0.50, -0.00),
  128. end: Alignment(0.50, 1.00),
  129. colors: [const Color(0xFFFFF7DB), const Color(0xFFFFFDFB)],
  130. ),
  131. ),
  132. ];
  133. NewDiscountController(
  134. this.storeRepository,
  135. this.accountRepository,
  136. this.configRepository,
  137. this.paymentStatusManager,
  138. );
  139. onBannerChanged(int index, CarouselPageChangedReason reason) {
  140. _currentBanner.value = index;
  141. }
  142. void refreshStoreData() {
  143. storeRepository.refreshNewDiscountGoodsInfoList();
  144. }
  145. Future<void> updateFilteredGoodsList() async {
  146. if (_selectedPayWay.value == null) {
  147. return;
  148. }
  149. _selectedGoodsInfoItem.value = null;
  150. int selectedPayWayId = _selectedPayWay.value!.id;
  151. filteredGoodsList.assignAll(
  152. goodsInfoList.where((goods) {
  153. return goods.payOptionIds == null ||
  154. goods.payOptionIds!.contains(selectedPayWayId);
  155. }).toList(),
  156. );
  157. if (filteredGoodsList.isNotEmpty) {
  158. _selectedGoodsInfoItem.value = filteredGoodsList.first;
  159. var isHasDiscount = await MethodChanelIOSUtil.isHasDiscount(goodsInfoList.first.appleGoodsId);
  160. isDiscount.value = isHasDiscount;
  161. }
  162. }
  163. void onGoodsItemClick(GoodsInfo goodsInfo) {
  164. _selectedGoodsInfoItem.value = goodsInfo;
  165. debugPrint("'item: ${goodsInfo.toJson()}");
  166. }
  167. void clickPayWaySwitch() {
  168. if (payWayList.isNotEmpty) {
  169. int currentIndex = payWayList.indexOf(
  170. _selectedPayWay.value ?? payWayList.first,
  171. );
  172. int nextIndex = (currentIndex + 1) % payWayList.length;
  173. _selectedPayWay.value = payWayList[nextIndex];
  174. updateFilteredGoodsList(); // 切换支付方式后,更新商品列表
  175. }
  176. }
  177. void clickBack() {
  178. Get.back();
  179. }
  180. void clickPayNow() {
  181. if (selectedGoodsInfoItem == null) {
  182. ToastUtil.show(StringName.memberPleaseChoiceGoods);
  183. return;
  184. }
  185. if (selectedPayWay == null) {
  186. ToastUtil.show(StringName.memberPleaseChoicePayment);
  187. return;
  188. }
  189. if (!isAgree.value) {
  190. MemberAgreementDialog.show(
  191. btnConfirm: () {
  192. isAgree.value = true;
  193. clickPayNow();
  194. },
  195. );
  196. return;
  197. }
  198. AtmobLog.d(tag, 'clickPayNow: ${selectedGoodsInfoItem!.toJson()}');
  199. final buyGoods = selectedGoodsInfoItem!;
  200. final buyPayWay = selectedPayWay!;
  201. int goodsId = buyGoods.id;
  202. int payPlatform = buyPayWay.payPlatform;
  203. int payMethod = buyPayWay.payMethod;
  204. int payWayType = getPayWayType(
  205. payMethod: payMethod,
  206. payPlatform: payPlatform,
  207. );
  208. LoadingDialog.show(StringName.payLoading);
  209. storeRepository
  210. .submitAndRequestPay(
  211. goodsId: goodsId,
  212. payPlatform: payPlatform,
  213. payMethod: payMethod,
  214. )
  215. .then((response) {
  216. if (payWayType == PayWayType.paymentWayWechat) {
  217. _onWeChatPay(
  218. response.outTradeNo,
  219. response.wechatPayPrepayJson!,
  220. payMethod,
  221. buyGoods,
  222. buyPayWay,
  223. );
  224. } else if (payWayType == PayWayType.paymentWayWechatScan) {
  225. _onWechatScanPay(
  226. response.outTradeNo,
  227. response.wechatPayQrcodeUrl!,
  228. buyPayWay,
  229. buyGoods,
  230. );
  231. } else if (payWayType == PayWayType.paymentWayAlipay) {
  232. _onAliPay(
  233. response.outTradeNo,
  234. response.alipayOrderString!,
  235. payMethod,
  236. buyGoods,
  237. buyPayWay,
  238. );
  239. } else if (payWayType == PayWayType.paymentWayAlipayScan) {
  240. _onAliScanPay(
  241. response.outTradeNo,
  242. response.alipayQrcodeHtml!,
  243. buyPayWay,
  244. buyGoods,
  245. );
  246. } else if (payWayType == PayWayType.paymentWayApple) {
  247. _onApplePay(
  248. response.outTradeNo,
  249. response.appAccountToken ?? "",
  250. buyPayWay,
  251. buyGoods,
  252. );
  253. } else {
  254. ToastUtil.show(StringName.payNotSupport);
  255. }
  256. })
  257. .catchError((error) {
  258. LoadingDialog.hide();
  259. if (error is ServerErrorException) {
  260. if (error.code == ErrorCode.payOrderError) {
  261. refreshStoreData();
  262. ToastUtil.show(error.message);
  263. } else if (error.code == ErrorCode.noLoginError) {
  264. ToastUtil.show(StringName.accountNoLogin);
  265. if (PlatformUtil.isIOS) {
  266. LoginPage.start();
  267. } else {
  268. LoginDialog.show();
  269. }
  270. } else {
  271. ToastUtil.show(error.message);
  272. paymentFail();
  273. }
  274. } else {
  275. ToastUtil.show(StringName.memberPaymentFailed);
  276. paymentFail();
  277. }
  278. })
  279. .whenComplete(() {
  280. if (PlatformUtil.isAndroid) {
  281. LoadingDialog.hide();
  282. }
  283. });
  284. }
  285. void paymentFail() {
  286. PaymentFailDialog.show(
  287. btnConfirm: () {
  288. clickPayNow();
  289. },
  290. );
  291. }
  292. void _onAliScanPay(
  293. String outTradeNo,
  294. String qrHtml,
  295. PayWayInfo payWayInfo,
  296. GoodsInfo goodsInfo,
  297. ) {
  298. AlipayQrCodeDialog.show(
  299. qrCodeHtml: qrHtml,
  300. loadSuccessCallback: () {
  301. checkPaymentStatus(outTradeNo, payWayInfo, goodsInfo);
  302. },
  303. onCloseCallback: () async {
  304. //关闭后再持续查询几秒
  305. CustomLoadingDialog.show();
  306. await Future.delayed(Duration(seconds: 4));
  307. paymentStatusManager.removePollingSubscription(outTradeNo);
  308. CustomLoadingDialog.hide();
  309. },
  310. );
  311. }
  312. void _onAliPay(
  313. String outTradeNo,
  314. String payJson,
  315. int payMethod,
  316. GoodsInfo buyGoods,
  317. PayWayInfo buyPayWay,
  318. ) {
  319. final payInfo = AliPayInfo(payJson);
  320. requestSdkPay(payInfo, outTradeNo, payMethod, buyGoods, buyPayWay);
  321. }
  322. void _onWeChatPay(
  323. String outTradeNo,
  324. String payJson,
  325. int payMethod,
  326. GoodsInfo buyGoods,
  327. PayWayInfo buyPayWay,
  328. ) {
  329. final bean = WechatPaymentSignBean.stringToBean(payJson);
  330. final payInfo = WechatPayInfo(
  331. appId: bean.appId,
  332. partnerId: bean.partnerId,
  333. prepayId: bean.prepayId,
  334. package: bean.package,
  335. noncestr: bean.nonceStr,
  336. timestamp: bean.timeStamp,
  337. sign: bean.sign,
  338. );
  339. requestSdkPay(payInfo, outTradeNo, payMethod, buyGoods, buyPayWay);
  340. }
  341. void _onWechatScanPay(
  342. String outTradeNo,
  343. String qrCodeUrl,
  344. PayWayInfo payWayInfo,
  345. GoodsInfo goodsInfo,
  346. ) {
  347. WechatQrCodeDialog.show(
  348. qrCodeUrl: qrCodeUrl,
  349. loadSuccessCallback: () {
  350. checkPaymentStatus(outTradeNo, payWayInfo, goodsInfo);
  351. },
  352. onCloseCallback: () async {
  353. //关闭后再持续查询几秒
  354. CustomLoadingDialog.show();
  355. await Future.delayed(Duration(seconds: 4));
  356. paymentStatusManager.removePollingSubscription(outTradeNo);
  357. CustomLoadingDialog.hide();
  358. },
  359. );
  360. }
  361. Future<void> _onApplePay(
  362. String outTradeNo,
  363. String appAccountToken,
  364. PayWayInfo payWayInfo,
  365. GoodsInfo goodsInfo,
  366. ) async {
  367. final result = await ApplePay().purchase(
  368. productId: goodsInfo.appleGoodsId,
  369. appAccountToken: appAccountToken,
  370. );
  371. if (result["success"] == true) {
  372. var receipt = result['receipt'];
  373. print('购买成功: ${result['receipt']}');
  374. checkPaymentStatus(
  375. outTradeNo,
  376. payWayInfo,
  377. goodsInfo,
  378. receiptData: receipt,
  379. );
  380. } else {
  381. LoadingDialog.hide();
  382. ToastUtil.show("支付失败,请稍后重试");
  383. print('购买失败: ${result['error']}');
  384. }
  385. }
  386. void checkPaymentStatus(
  387. String orderNo,
  388. PayWayInfo payWayInfo,
  389. GoodsInfo goodsInfo, {
  390. String? receiptData,
  391. }) {
  392. paymentStatusManager.registerPaymentSuccessCallback(orderNo, this);
  393. paymentStatusManager.checkPaymentStatus(
  394. orderNo,
  395. payWayInfo,
  396. goodsInfo,
  397. receiptData: receiptData,
  398. );
  399. }
  400. void requestSdkPay(
  401. dynamic payInfo,
  402. String outTradeNo,
  403. int payMethod,
  404. GoodsInfo buyGoods,
  405. PayWayInfo buyPayWay,
  406. ) {
  407. AgilePay.startPay(
  408. payInfo,
  409. success: (String? result) {
  410. LoadingDialog.show(StringName.payQuerypayState);
  411. checkPaymentStatus(
  412. outTradeNo,
  413. buyPayWay,
  414. buyGoods,
  415. receiptData: result,
  416. );
  417. },
  418. payError: (int error, String? errorMessage) {
  419. debugPrint('zk---payError: $error, $errorMessage');
  420. paymentFail();
  421. errorPayToast(error);
  422. errorEventReport(payMethod);
  423. },
  424. error: (int errno, String? error) {
  425. debugPrint('zk---error: $errno, $error');
  426. errorPayToast(errno);
  427. errorEventReport(payMethod);
  428. },
  429. );
  430. }
  431. void errorEventReport(int payMethod) {
  432. if (payMethod == PayMethod.wechat) {
  433. // EventHandler.report();
  434. } else if (payMethod == PayMethod.alipay) {
  435. // EventHandler.report();
  436. } else if (payMethod == PayMethod.apple) {
  437. // EventHandler.report();
  438. }
  439. }
  440. void errorPayToast(int errno) {
  441. if (errno == AgilePayCode.payCodeNotSupport) {
  442. ToastUtil.show(StringName.payNotSupport);
  443. } else if (errno == AgilePayCode.payCodeCancelError) {
  444. ToastUtil.show(StringName.payUserCancel);
  445. } else if (errno == AgilePayCode.payCodeWxEnvError) {
  446. ToastUtil.show(StringName.payWxEvnError);
  447. } else if (errno == AgilePayCode.payCodeNotConnectStore) {
  448. ToastUtil.show(StringName.payNotConnectStore);
  449. } else {
  450. ToastUtil.show(StringName.payError);
  451. }
  452. }
  453. @override
  454. void onReady() {
  455. super.onReady();
  456. // refreshStoreData();
  457. }
  458. @override
  459. void onInit() {
  460. super.onInit();
  461. if (goodsInfoList.isNotEmpty) {
  462. _selectedGoodsInfoItem.value = goodsInfoList.first;
  463. }
  464. if (payWayList.isNotEmpty) {
  465. _selectedPayWay.value = payWayList.first;
  466. updateFilteredGoodsList();
  467. }
  468. ever<List<GoodsInfo>>(goodsInfoList, (list) {
  469. if (list.isNotEmpty) {
  470. _selectedGoodsInfoItem.value = list.first;
  471. }
  472. });
  473. ever<List<PayWayInfo>>(payWayList, (list) {
  474. if (list.isNotEmpty) {
  475. _selectedPayWay.value = list.first;
  476. updateFilteredGoodsList();
  477. }
  478. });
  479. }
  480. @override
  481. void onClose() {
  482. super.onClose();
  483. _storeDataFuture?.cancel();
  484. paymentStatusManager.unregisterPaymentSuccessCallback(this);
  485. if (!isFirstIntoDiscount() && !accountRepository.isVipUser) {
  486. if (PlatformUtil.isAndroid) {
  487. SurpriseDialog.show(
  488. clickConfirm: () {
  489. NewDiscountPage.start();
  490. },
  491. clickCancel: () {},
  492. );
  493. }
  494. if (PlatformUtil.isIOS) {
  495. DiscountTicketDialog.show(
  496. clickConfirm: () {
  497. NewDiscountPage.start();
  498. },
  499. clickCancel: () {},
  500. );
  501. }
  502. } else {
  503. setFirstIntoDiscount(false);
  504. }
  505. }
  506. @override
  507. void onPaymentSuccess(
  508. String orderNo,
  509. PayWayInfo payWayInfo,
  510. GoodsInfo goodsInfo,
  511. ) {
  512. if (PlatformUtil.isIOS) {
  513. accountRepository.refreshUserInfo();
  514. // 300ms后关闭弹窗
  515. Future.delayed(Duration(seconds: 2), () {
  516. LoadingDialog.hide();
  517. AtmobLog.d(tag, 'onPaymentSuccess: $orderNo');
  518. Get.back();
  519. PaymentSuccessDialog.show(
  520. goodsInfo: goodsInfo,
  521. btnConfirm: () {
  522. AtmobLog.d(tag, 'onGoodsItemClick: ${goodsInfo.toJson()}');
  523. },
  524. );
  525. });
  526. } else {
  527. LoadingDialog.hide();
  528. AtmobLog.d(tag, 'onPaymentSuccess: $orderNo');
  529. Get.back();
  530. PaymentSuccessDialog.show(
  531. goodsInfo: goodsInfo,
  532. btnConfirm: () {
  533. AtmobLog.d(tag, 'onGoodsItemClick: ${goodsInfo.toJson()}');
  534. },
  535. );
  536. }
  537. }
  538. @override
  539. void onPaymentError(Error error) {
  540. // TODO: implement onPaymentError
  541. if (PlatformUtil.isIOS) {
  542. LoadingDialog.hide();
  543. ErrorHandler.toastError(error);
  544. }
  545. }
  546. /// 恢复订阅
  547. Future<void> clickRestore() async {
  548. PayWayInfo? paymentWay = _selectedPayWay.value;
  549. if (paymentWay == null) {
  550. return;
  551. }
  552. int payPlatform = paymentWay.payPlatform;
  553. int payMethod = paymentWay.payMethod;
  554. CustomLoadingDialog.show();
  555. Future.delayed(const Duration(seconds: 20), () {
  556. CustomLoadingDialog.hide();
  557. ToastUtil.show("没有发现可恢复的记录");
  558. });
  559. final result = await ApplePay().restore();
  560. if (result["success"] == true) {
  561. // CustomLoadingDialog.hide();
  562. var receipt = result['receipt'];
  563. print('查找恢复记录成功: ${result['receipt']}');
  564. checkRestoreStatus(receipt);
  565. } else {
  566. CustomLoadingDialog.hide();
  567. ToastUtil.show("恢复失败");
  568. print('恢复失败: ${result['error']}');
  569. }
  570. // 显示恢复订阅弹窗
  571. // RecoverSubscribeDialog.show("周会员2025年3月6日到期。", () {
  572. // AtmobLog.d(tag, "恢复订阅弹窗 => 点击确认");
  573. // });
  574. }
  575. /// 检查恢复订阅结果
  576. Future<void> checkRestoreStatus(String? receiptData) async {
  577. PayWayInfo? paymentWay = _selectedPayWay.value;
  578. if (paymentWay == null) {
  579. // ToastUtil.showToast(StringName.storeChoicePayment.tr);
  580. return;
  581. }
  582. if (receiptData == null) {
  583. return;
  584. }
  585. int payPlatform = paymentWay.payPlatform;
  586. int payMethod = paymentWay.payMethod;
  587. // var code = await storeRepository.resume(payPlatform, payMethod, receiptData);
  588. storeRepository
  589. .subscribeResume(payPlatform, payMethod, receiptData)
  590. .then((data) {
  591. CustomLoadingDialog.hide();
  592. ToastUtil.show("恢复成功");
  593. accountRepository.getUserInfo();
  594. Get.back();
  595. })
  596. .catchError((error) {
  597. CustomLoadingDialog.hide();
  598. ToastUtil.show("恢复失败");
  599. });
  600. // if (code == 0) {
  601. // CustomLoadingDialog.hide();
  602. // ToastUtil.show("Restore success");
  603. // userRepository.getUserInfo();
  604. // Get.back();
  605. // } else {
  606. // CustomLoadingDialog.hide();
  607. // ToastUtil.show("Restore fail");
  608. // }
  609. }
  610. }