diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 868db348..eeb98d56 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -151,8 +151,8 @@ create-release: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/StarLock-${StarLock_VERSION}-*" - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj-release-${CI_COMMIT_TAG}.apk "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.apk"' - - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj-release-${CI_COMMIT_TAG}.aab - "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.aab"' + - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab + "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab"' - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.apk "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.apk"' - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.aab diff --git a/lan/lan_en.json b/lan/lan_en.json index f0fb0b45..99767e88 100644 --- a/lan/lan_en.json +++ b/lan/lan_en.json @@ -1153,6 +1153,7 @@ "是否要远程开锁": "Do you want to unlock remotely", "国家地区的选择将影响数据安全,你当前选择的是": "The choice of country or region will affect data security. What is your current choice", "请确认后再继续": "Please confirm before continuing", + "需要相机权限": "Camera permission required", "此功能的开启和关闭只能在锁附近通过手机蓝牙进行": "The activation and deactivation of this feature can only be done through Bluetooth on the phone near the lock", "网关添加成功": "Gateway added successfully" } diff --git a/lan/lan_keys.json b/lan/lan_keys.json index 5f37ad05..b9e8172d 100755 --- a/lan/lan_keys.json +++ b/lan/lan_keys.json @@ -1160,6 +1160,7 @@ "繁体中文(中国香港)": "繁体中文(中国香港)", "国家地区的选择将影响数据安全,你当前选择的是": "国家地区的选择将影响数据安全,你当前选择的是", "请确认后再继续": "请确认后再继续", + "需要相机权限": "需要相机权限", "此功能的开启和关闭只能在锁附近通过手机蓝牙进行": "此功能的开启和关闭只能在锁附近通过手机蓝牙进行", "网关添加成功": "网关添加成功" } diff --git a/lan/lan_zh.json b/lan/lan_zh.json index a2c5906f..bde3239c 100755 --- a/lan/lan_zh.json +++ b/lan/lan_zh.json @@ -1162,5 +1162,6 @@ "繁体中文(中国香港)": "繁体中文(中国香港)", "国家地区的选择将影响数据安全,你当前选择的是": "国家地区的选择将影响数据安全,你当前选择的是", "请确认后再继续": "请确认后再继续", + "需要相机权限": "需要相机权限", "网关添加成功": "网关添加成功" } diff --git a/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart b/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart index 810038cf..6f12d9f5 100755 --- a/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart +++ b/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart @@ -1,7 +1,7 @@ - import 'dart:async'; import 'dart:io'; import 'dart:typed_data'; +import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:image_picker/image_picker.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -31,27 +31,30 @@ class MinePersonInfoLogic extends BaseGetXController { //上传头像 先获取upToken 再调用updateUserInfo Future getUpTokenRequest(String filename, int size) async { - final MinePersonGetUploadFileInfoEntity entity = await ApiRepository.to.getUpToken( - userId: state.mineInfoData.value.uid!.toString(), - filename: filename, - size: size); + final MinePersonGetUploadFileInfoEntity entity = await ApiRepository.to + .getUpToken( + userId: state.mineInfoData.value.uid!.toString(), + filename: filename, + size: size); if (entity.errorCode!.codeIsSuccessful) { uploadFile(entity); } } // 上传头像 - Future uploadFile(MinePersonGetUploadFileInfoEntity minePersonGetUploadFileInfoEntity) async { + Future uploadFile( + MinePersonGetUploadFileInfoEntity + minePersonGetUploadFileInfoEntity) async { final File bytes = File(state.image!.path); final Uint8List enc = await bytes.readAsBytes(); - final FormData form = FormData(minePersonGetUploadFileInfoEntity.data!.formData!); - form.files.add( - MapEntry( - minePersonGetUploadFileInfoEntity.data!.fileField!, - MultipartFile(enc, filename: minePersonGetUploadFileInfoEntity.data!.formData!['key']) - ) - ); + final FormData form = + FormData(minePersonGetUploadFileInfoEntity.data!.formData!); + form.files.add(MapEntry( + minePersonGetUploadFileInfoEntity.data!.fileField!, + MultipartFile(enc, + filename: + minePersonGetUploadFileInfoEntity.data!.formData!['key']))); final LoginEntity entity = await ApiRepository.to.uploadFile( url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form); @@ -63,7 +66,8 @@ class MinePersonInfoLogic extends BaseGetXController { //更新个人信息-头像 Future updateUserInfoRequest(String headUrl) async { - final PasswordKeyListEntity entity = await ApiRepository.to.updateUserHeadUrlInfo(headUrl: headUrl); + final PasswordKeyListEntity entity = + await ApiRepository.to.updateUserHeadUrlInfo(headUrl: headUrl); if (entity.errorCode!.codeIsSuccessful) { state.headUrl.value = headUrl; state.mineInfoData.value.headUrl = state.headUrl.value; @@ -88,9 +92,9 @@ class MinePersonInfoLogic extends BaseGetXController { ///拍摄照片 Future selectCamera() async { final XFile? photo = await state.imagePicker.pickImage( - source: ImageSource.camera, - maxHeight: 250, - maxWidth: 250, + source: ImageSource.camera, + maxHeight: 250, + maxWidth: 250, ); if (photo != null) { state.image = photo; @@ -117,16 +121,68 @@ class MinePersonInfoLogic extends BaseGetXController { //权限判断 访问相机 Future _checkCameraPermission() async { - final bool status = await PermissionDialog.request(Permission.camera); - if (status) { + final PermissionStatus status = await Permission.camera.status; + if (status.isPermanentlyDenied) { + // 用户永久拒绝了权限,引导用户去设置中心开启 + Get.dialog( + AlertDialog( + title: Text('需要相机权限'.tr), + content: Text('请在设置中允许访问相机'.tr), + actions: [ + TextButton( + onPressed: () => Get.back(), + child: Text('取消'.tr), + ), + TextButton( + onPressed: () { + Get.back(); + openAppSettings(); + }, + child: Text('去设置'.tr), + ), + ], + ), + ); + return; + } + + // 权限未被永久拒绝,尝试请求权限 + final bool granted = await PermissionDialog.request(Permission.camera); + if (granted) { selectCamera(); } } //权限判断 访问相册 Future _checkPhotoPermission() async { - final bool status = await PermissionDialog.requestPhotos(); - if (status) { + final PermissionStatus status = await Permission.photos.status; + if (status.isPermanentlyDenied) { + // 用户永久拒绝了权限,引导用户去设置中心开启 + Get.dialog( + AlertDialog( + title: Text('需要相册权限'.tr), + content: Text('请在设置中允许访问相册'.tr), + actions: [ + TextButton( + onPressed: () => Get.back(), + child: Text('取消'.tr), + ), + TextButton( + onPressed: () { + Get.back(); + openAppSettings(); + }, + child: Text('去设置'.tr), + ), + ], + ), + ); + return; + } + + // 权限未被永久拒绝,尝试请求权限 + final bool granted = await PermissionDialog.requestPhotos(); + if (granted) { selectImage(); } } diff --git a/lib/talk/starChart/star_chart_manage.dart b/lib/talk/starChart/star_chart_manage.dart index d379ef01..328e80b8 100644 --- a/lib/talk/starChart/star_chart_manage.dart +++ b/lib/talk/starChart/star_chart_manage.dart @@ -123,6 +123,10 @@ class StartChartManage { // 星图服务初始化 Future init() async { + if (F.isXHJ) { + return; + } + // 判断是否登录账户 final loginData = await Storage.getLoginData();