import 'dart:convert'; import 'package:flutter/services.dart'; import 'package:fluwx/fluwx.dart'; import 'package:get/get.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/mine/mall/webview/webview_logic.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:webview_flutter/webview_flutter.dart'; import '../../../tools/wechat/pay/wx_pay_tool.dart'; import '../../../tools/wechat/wechatManageTool.dart'; class AdvancedFeaturesWebLogic extends BaseGetXController { late AdvancedFeaturesWebState state = AdvancedFeaturesWebState(); DateTime? _lastPressedAt; // 记录上一次按下返回键的时间 //获取购买跳转地址 Future getVipBuyURLRequest() async { final AdvancedFeaturesWebEntity entity = await ApiRepository.to.getServicePackageBuyUrl(); if (entity.errorCode!.codeIsSuccessful) { if (state.webBuyType.value == XSConstantMacro.webBuyTypeVip) { state.webBuyUrl.value = entity.data!.vipBuyUrl!; state.webBuyTitle.value = '高级功能'.tr; } else if (state.webBuyType.value == XSConstantMacro.webBuyTypeAuth) { state.webBuyUrl.value = entity.data!.cloudauthBuyUrl!; state.webBuyTitle.value = '实名认证'.tr; } else if (state.webBuyType.value == XSConstantMacro.webBuyTypeSMS) { state.webBuyUrl.value = entity.data!.smsBuyUrl!; state.webBuyTitle.value = '短信购买'.tr; } else if (state.webBuyType.value == XSConstantMacro.webBuyTypeEmail) { state.webBuyUrl.value = entity.data!.emailBuyUrl!; state.webBuyTitle.value = '邮件购买'.tr; } else if (state.webBuyType.value == XSConstantMacro.webBuyTypeShop) { state.webBuyUrl.value = entity.data!.shopList!; state.webBuyTitle.value = '商城购买'.tr; }else if (state.webBuyType.value == XSConstantMacro.webBuyTypeCloudStorage) { state.webBuyUrl.value = entity.data!.cloudStorage!; state.webBuyTitle.value = '云存购买'.tr; } state.webBuyView.setNavigationDelegate( NavigationDelegate( onProgress: (int progress) { // Update loading bar. state.webProgress.value = progress / 100; }, onPageStarted: (String url) { state.webProgress.value = 0.0; }, onPageFinished: (String url) { state.webProgress.value = 1.0; }, onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) async { //路由跳转逻辑 if (WebViewLogic.judgePaySchemes(request.url)) { await WebViewLogic.runScheme(request.url); return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ); state.webBuyView.loadRequest(Uri.parse(state.webBuyUrl.value)); state.webBuyView.addJavaScriptChannel( 'FlutterBridge', onMessageReceived: (JavaScriptMessage message) async { flutterBridge(message); }, ); } } //监听webview的调用 Future flutterBridge(JavaScriptMessage message) async { final dynamic obj = jsonDecode(message.message); if (obj is! Map && obj['action'] is String) { return; } final String action = obj['action']; final dynamic data = obj['data']; final String? callFun = obj['callFun']; switch (action) { case 'WechatPayParams': //微信支付 WechatManageTool.getAppInfo(() { wxPay(data, callFun); }); // wxPay(data, callFun); break; } } //微信支付 Future wxPay(dynamic data, String? callFun) async { WxPayTool.pay(WxPayTool.mapToPayment(data), (WeChatResponse response) { if (response is WeChatPaymentResponse) { final Map data = { 'type': response.type, 'extData': response.extData, 'errCode': response.errCode, 'errStr': response.errStr, }; state.webBuyView.runJavaScript( 'window.$callFun(`${json.encode(data)}`)', ); } }); } //判断webview 是否可以有路由可以回退,无则退出当前页面 Future canGoBack(bool didPop) async { final bool canGoBack = await state.webBuyView.canGoBack(); if (canGoBack) { await state.webBuyView.goBack(); } else if (state.allowReturn) { Get.back(result: true); } else { if (_lastPressedAt == null || DateTime.now().difference(_lastPressedAt!) > const Duration(seconds: 2)) { // 如果两次返回键时间间隔大于 2 秒,则提示再次按下返回键退出 _lastPressedAt = DateTime.now(); showToast('${'再返回一次退出'.tr}${F.title}'); return false; } SystemNavigator.pop(); return true; } refreshGoBack(); return false; } //刷新当前路由状态 void refreshGoBack() { //如果属于一直返回按钮,则根据是否有路由可以回退刷新 if (state.allowReturn) { return; } state.webBuyView.canGoBack().then((bool value) { state.canGoBack = value; update(); }); } @override Future onReady() async { super.onReady(); } @override void onInit() { super.onInit(); getVipBuyURLRequest(); } }