diff --git a/lib/pages/mh_page/device/mht_blueteeth_device_page.dart b/lib/pages/mh_page/device/mht_blueteeth_device_page.dart index 75a86cf..c7b3eb6 100644 --- a/lib/pages/mh_page/device/mht_blueteeth_device_page.dart +++ b/lib/pages/mh_page/device/mht_blueteeth_device_page.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:io'; import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; @@ -11,6 +12,7 @@ import 'package:vbvs_app/common/util/CommonVariables.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; +import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/main_bottom/global_controller.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/controller/user_info_controller.dart'; @@ -122,75 +124,78 @@ class _MHTBlueteethDevicePageState extends State { Future _requestBluetoothPermission() async { Map statuses = {}; bool dialogShown = false; // 标记是否弹过权限提示弹窗 - - try { - // 检查是否已授权 - bool alreadyGranted = await Permission.bluetoothScan.isGranted && - await Permission.bluetoothConnect.isGranted && - await Permission.location.isGranted; - - if (!alreadyGranted) { - // 弹出自定义提示 - showPermissionInfoDialog( - Get.context!, CommonVariables().bluetoothpermissionInfo); - dialogShown = true; - - await Future.delayed(const Duration(milliseconds: 300)); - - // 请求权限 - statuses = await [ - Permission.bluetoothScan, - Permission.bluetoothConnect, - Permission.location, - ].request(); - - ef.log("权限状态: $statuses"); + if (Platform.isIOS) { + PermissionStatus isBleGranted = await Permission.bluetooth.request(); + print('checkBlePermissions-ios, isBleGranted=$isBleGranted'); + if (isBleGranted.isGranted) { + // startBluetoothScanning(); + _startScanning(); + _startPeriodicScan(); } else { - statuses = { - Permission.bluetoothScan: PermissionStatus.granted, - Permission.bluetoothConnect: PermissionStatus.granted, - Permission.location: PermissionStatus.granted, - }; + // showToast("蓝牙开关或蓝牙权限未开启,请开启蓝牙开关与蓝牙权限".tr, closeTime: 7); + TopSlideNotification.show(context, + text: "蓝牙开关或蓝牙权限未开启,请开启蓝牙开关与蓝牙权限".tr, + textColor: themeController.currentColor.sc9); } - } catch (e) { - ef.log("申请权限出错: $e"); - } finally { - // 只有真的弹过提示才关闭 - if (dialogShown && Get.context != null) { - Navigator.of(Get.context!, rootNavigator: true).pop(); + } else if (Platform.isAndroid) { + try { + // 检查是否已授权 + bool alreadyGranted = await Permission.bluetoothScan.isGranted && + await Permission.bluetoothConnect.isGranted && + await Permission.location.isGranted; + + if (!alreadyGranted) { + // 弹出自定义提示 + showPermissionInfoDialog( + Get.context!, CommonVariables().bluetoothpermissionInfo); + dialogShown = true; + + await Future.delayed(const Duration(milliseconds: 300)); + + // 请求权限 + statuses = await [ + Permission.bluetoothScan, + Permission.bluetoothConnect, + Permission.location, + ].request(); + + ef.log("权限状态: $statuses"); + } else { + statuses = { + Permission.bluetoothScan: PermissionStatus.granted, + Permission.bluetoothConnect: PermissionStatus.granted, + Permission.location: PermissionStatus.granted, + }; + } + } catch (e) { + ef.log("申请权限出错: $e"); + } finally { + // 只有真的弹过提示才关闭 + if (dialogShown && Get.context != null) { + Navigator.of(Get.context!, rootNavigator: true).pop(); + } } - } + bool allGranted = statuses[Permission.bluetoothScan]?.isGranted == true && + statuses[Permission.bluetoothConnect]?.isGranted == true && + statuses[Permission.location]?.isGranted == true; - bool allGranted = statuses[Permission.bluetoothScan]?.isGranted == true && - statuses[Permission.bluetoothConnect]?.isGranted == true && - statuses[Permission.location]?.isGranted == true; - - if (allGranted) { - _startScanning(); - _startPeriodicScan(); + if (allGranted) { + _startScanning(); + _startPeriodicScan(); + } else { + _showPermissionDeniedDialog(context); + } } else { - _showPermissionDeniedDialog(); + TopSlideNotification.show(context, + text: "当前系统不支持蓝牙,无法使用此功能".tr, + textColor: themeController.currentColor.sc9); } } - void _showPermissionDeniedDialog() { - showDialog( - context: context, - builder: (BuildContext context) { - return AlertDialog( - title: Text("权限提示".tr), - content: Text("应用需要蓝牙和位置权限才能扫描设备。请授予权限。".tr), - actions: [ - TextButton( - onPressed: () { - Navigator.of(context).pop(); - }, - child: Text("确定".tr), - ), - ], - ); - }, - ); + void _showPermissionDeniedDialog(BuildContext context) { + TopSlideNotification.show(context, + text: "应用需要蓝牙和位置权限才能扫描设备。请授予权限。".tr, + textColor: themeController.currentColor.sc9); } void _startScanning() async { diff --git a/lib/pages/mh_page/user/controller/mht_login_controller.dart b/lib/pages/mh_page/user/controller/mht_login_controller.dart index 43ab9ef..3424b9e 100644 --- a/lib/pages/mh_page/user/controller/mht_login_controller.dart +++ b/lib/pages/mh_page/user/controller/mht_login_controller.dart @@ -222,7 +222,7 @@ class MHTLoginController extends GetControllerEx { } //微信登录 - Future wxLoginSendAuth() async { + Future wxLoginSendAuth(BuildContext context) async { /* 1、目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用。 2、对于Android应用,建议总是显示微信登录按钮,当用户手机没有安装微信客户端时,请引导用户下载安装微信客户端。 @@ -233,7 +233,9 @@ class MHTLoginController extends GetControllerEx { bool isWeChatInstalled = await fluwx.isWeChatInstalled; debugPrint('is wechat installed: $isWeChatInstalled'); if (!isWeChatInstalled) { - showToast("请先安装微信APP,再使用微信登录".tr); + TopSlideNotification.show(context, + text: "请先安装微信APP,再使用微信登录".tr, + textColor: themeController.currentColor.sc9); return; } } @@ -255,42 +257,48 @@ class MHTLoginController extends GetControllerEx { } Future loginByWechatCode(String code) async { - String serviceAddress = ServiceConstant.service_address; - String serviceName = ServiceConstant.server_service; - String serviceApi = ServiceConstant.login; - String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; - String? language = ""; - var data = { - "type": 2, - "password": code, - "khCode": "mht", - }; - ApiResponse apiResponse = await requestWithLog( - logTitle: "微信登录".tr, - method: MyHttpMethod.post, - queryUrl: queryUrl, - data: data); - if (apiResponse.code == HttpStatusCodes.ok) { - UserInfoController userInfoController = Get.find(); - userInfoController.model.user = UserModel.fromJson(apiResponse.data); - userInfoController.model.login = 1; - String token = apiResponse.rawResponse.headers['token']!.first; - EasyDartModule.dio.token = token; - final box = GetStorage(); - box.write('token', token); // 存储 token - box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息 - if (userInfoController.model.user!.phone == null || - userInfoController.model.user!.phone!.isEmpty) { - await Get.toNamed("/auth_bind_tel", arguments: {'code':'mht'}); + try { + String serviceAddress = ServiceConstant.service_address; + String serviceName = ServiceConstant.server_service; + String serviceApi = ServiceConstant.login; + String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; + String? language = ""; + var data = { + "type": 2, + "password": code, + "khCode": "mht", + }; + ApiResponse apiResponse = await requestWithLog( + logTitle: "微信登录".tr, + method: MyHttpMethod.post, + queryUrl: queryUrl, + data: data); + if (apiResponse.code == HttpStatusCodes.ok) { + ef.log("微信登录授权成功:${apiResponse}"); + UserInfoController userInfoController = Get.find(); + userInfoController.model.user = UserModel.fromJson(apiResponse.data); + userInfoController.model.login = 1; + String token = apiResponse.rawResponse.headers['token']!.first; + EasyDartModule.dio.token = token; + final box = GetStorage(); + box.write('token', token); // 存储 token + box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息 + if (userInfoController.model.user!.phone == null || + userInfoController.model.user!.phone!.isEmpty) { + await Get.toNamed("/auth_bind_tel", arguments: {'code': 'mht'}); + } + if (userInfoController.model.user!.phone == null || + userInfoController.model.user!.phone!.isEmpty) { + userInfoController.model.login = 0; + } + } else { + EasyDartModule.logger.error("[微信登录]:失败-》${apiResponse}"); } - if (userInfoController.model.user!.phone == null || - userInfoController.model.user!.phone!.isEmpty) { - userInfoController.model.login = 0; - } - } else { - EasyDartModule.logger.error("[微信登录]:失败-》${apiResponse}"); + return apiResponse.code!; + } catch (e) { + ef.log("微信登录:$e"); } - return apiResponse.code!; + return 1; } //注销账号 diff --git a/lib/pages/mh_page/user/page/mht_login_page.dart b/lib/pages/mh_page/user/page/mht_login_page.dart index 462a371..49e097c 100644 --- a/lib/pages/mh_page/user/page/mht_login_page.dart +++ b/lib/pages/mh_page/user/page/mht_login_page.dart @@ -1,8 +1,5 @@ -import 'dart:io'; - import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; import 'package:fluwx/fluwx.dart'; import 'package:get_storage/get_storage.dart'; @@ -17,7 +14,6 @@ import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/time/countdown_controller.dart'; import 'package:vbvs_app/controller/user_info_controller.dart'; -import 'package:vbvs_app/pages/common/selectDialog.dart'; import 'package:vbvs_app/pages/mh_page/user/controller/mht_login_controller.dart'; import 'package:vbvs_app/pages/mh_page/user/controller/mht_register_controller.dart'; @@ -68,9 +64,9 @@ class MHTLoginPage extends GetView { debugPrint('is wechat installed: $isWeChatInstalled'); if (!isWeChatInstalled) { // TODO ios未安装微信 隐藏微信一键登录按钮 - controller.model.isWeChatNotInstalled = false; - } else { controller.model.isWeChatNotInstalled = true; + } else { + controller.model.isWeChatNotInstalled = false; } controller.updateAll(); }); @@ -1860,7 +1856,7 @@ class MHTLoginPage extends GetView { final loginController = Get.find(); await loginController - .wxLoginSendAuth(); + .wxLoginSendAuth(context); }, child: Container( width: 90.rpx,