app-starlock/lib/mine/mall/lockMall_logic.dart
魏少阳 a7336b79cc 1、添加开完锁之后数据上传
2、打包apk上传到pre下载页
3、完成App启动数据请求优化问题
2024-09-02 18:09:57 +08:00

151 lines
4.7 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/flavors.dart';
import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_logic.dart';
import 'package:star_lock/mine/mall/lockMall_entity.dart';
import 'package:star_lock/mine/mall/lockMall_state.dart';
import 'package:star_lock/mine/mall/webview/webview_logic.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:webview_flutter/webview_flutter.dart';
import '../../tools/baseGetXController.dart';
import '../../tools/wechat/pay/wx_pay_tool.dart';
import '../../tools/wechat/wechatManageTool.dart';
class LockMallLogic extends BaseGetXController {
late LockMallState state;
DateTime? _lastPressedAt; // 记录上一次按下返回键的时间
LockMallLogic({required bool allowReturn})
: state = LockMallState(allowReturn: allowReturn);
//获取商城跳转地址
Future<void> getMallURLRequest() async {
final LockMallDataEntity entity = await ApiRepository.to.getMallURLData();
if (entity.errorCode!.codeIsSuccessful) {
state.lockMallUrl.value = entity.data!.url!;
state.mallWebView.setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {
state.webProgress.value = progress / 100;
},
onPageStarted: (String url) {
state.webProgress.value = 0.0;
},
onPageFinished: (String url) {
state.webProgress.value = 1.0;
refreshGoBack();
update();
},
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.lockMallUrl.value));
state.mallWebView.addJavaScriptChannel(
'FlutterBridge',
onMessageReceived: (JavaScriptMessage message) async {
flutterBridge(message);
},
);
}
}
//监听webview的调用
Future<void> flutterBridge(JavaScriptMessage message) async {
final dynamic obj = json.decode(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 = <String, dynamic>{
'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 {
final bool canGoBack = await state.mallWebView.canGoBack();
bool isMall = true;
if (Get.isRegistered<LockMainXHJLogic>() && F.isXHJ) {
isMall = Get.find<LockMainXHJLogic>().isMall;
}
if (canGoBack && isMall) {
await state.mallWebView.goBack();
} else if (state.allowReturn && isMall) {
Get.back();
} 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.mallWebView.canGoBack().then((bool value) {
state.canGoBack = value;
update();
});
}
@override
Future<void> onReady() async {
super.onReady();
}
@override
void onInit() {
super.onInit();
getMallURLRequest();
}
}