Daisy a4a7ee9fa4 1,新增高级功能根据权限展示不同入口
2,新增添加开门通知保存时弹出需开通Alert框
3,新增增值服务套餐购包链接
4,已开通高级功能布局修改
2024-04-29 14:59:25 +08:00

123 lines
3.8 KiB
Dart

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<void> 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<void> 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<void> 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<bool> 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<void> onReady() async {
super.onReady();
}
@override
void onInit() {
super.onInit();
getVipBuyURLRequest();
}
@override
void onClose() {
super.onClose();
}
}