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