import 'dart:convert'; import 'package:fluwx/fluwx.dart'; import 'package:get/get.dart'; import 'package:star_lock/app_settings/app_settings.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:star_lock/tools/pay/wx_pay_tool.dart'; import 'package:star_lock/webview/webview_logic.dart'; import 'package:webview_flutter/webview_flutter.dart'; class AdvancedFeaturesWebLogic extends BaseGetXController { late AdvancedFeaturesWebState state; AdvancedFeaturesWebLogic({required bool allowReturn}) : state = AdvancedFeaturesWebState(allowReturn: allowReturn); //获取商城跳转地址 Future getVipBuyURLRequest() async { AdvancedFeaturesWebEntity entity = await ApiRepository.to.getServicePackageBuyUrl(); if (entity.errorCode!.codeIsSuccessful) { state.vipBuyUrl.value = entity.data!.shopList!; state.mallWebView.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.mallWebView.loadRequest(Uri.parse(state.vipBuyUrl.value)); // FlutterBridge.postMessage({action:'',data:'{}',callFun:'回调给js的方法'}) state.mallWebView.addJavaScriptChannel( "FlutterBridge", onMessageReceived: (JavaScriptMessage message) async { flutterBridge(message); }, ); // onMessageReceived } } //监听webview的调用 Future flutterBridge(JavaScriptMessage message) async { final dynamic obj = jsonDecode(message.message); AppLog.log(obj); if (obj is! Map && obj['action'] is String) { return; } String action = obj['action']; dynamic data = obj['data']; String? callFun = obj['callFun']; switch (action) { case 'WechatPayParams': //微信支付 wxPay(data, callFun); break; } } //微信支付 Future wxPay(dynamic data, String? callFun) async { WxPayTool.pay(WxPayTool.mapToPayment(data), (response) { if (response is WeChatPaymentResponse) { Map data = { 'type': response.type, 'extData': response.extData, 'errCode': response.errCode, 'errStr': response.errStr, }; state.mallWebView.runJavaScript( 'window.$callFun(`${json.encode(data)}`)', ); } }); } //判断webview 是否可以有路由可以回退,无则退出当前页面 Future canGoBack(bool didPop) async { bool canGoBack = await state.mallWebView.canGoBack(); if (canGoBack) { await state.mallWebView.goBack(); } else { if (state.allowReturn) Get.back(); } return false; } @override Future onReady() async { super.onReady(); } @override void onInit() { super.onInit(); getVipBuyURLRequest(); } @override void onClose() { super.onClose(); } }