164 lines
5.6 KiB
Dart
Executable File
164 lines
5.6 KiB
Dart
Executable File
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<void> 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<void> 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<void> 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<bool> 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<void> onReady() async {
|
|
super.onReady();
|
|
}
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
getVipBuyURLRequest();
|
|
}
|
|
}
|