Merge branch 'master_hyx'

This commit is contained in:
“ante” 2024-04-10 15:33:10 +08:00
commit fa316cb889
13 changed files with 273 additions and 220 deletions

1
star_lock/.fvm/flutter_sdk Symbolic link
View File

@ -0,0 +1 @@
/Users/mac/fvm/versions/3.16.5

View File

@ -0,0 +1,3 @@
{
"flutterSdkVersion": "3.16.5"
}

1
star_lock/.fvm/release Normal file
View File

@ -0,0 +1 @@
3.16.5

1
star_lock/.fvm/version Normal file
View File

@ -0,0 +1 @@
3.16.5

View File

@ -0,0 +1 @@
/Users/mac/fvm/versions/3.16.5

View File

@ -613,5 +613,23 @@
"地图加载中,请稍候。。": "The map is loading, please wait...",
"跳过": "Skip",
"还未获取到位置信息哦,请耐心等待一下!": "The location information has not been obtained yet, please wait patiently!",
"请填写信息": "Please fill in the information"
"请填写信息": "Please fill in the information",
"permission_dialog_camera": "camera",
"permission_dialog_photos": "photos",
"permission_dialog_storage": "storage",
"permission_dialog_location": "location",
"permission_dialog_camera_text": "Access to the camera is required to take photos and upload files, such as uploading a profile picture",
"permission_dialog_photos_text": "Access to camera is required to upload files and avatars using album images",
"permission_dialog_storage_text": "Access to read and write permissions is required to upload avatars using local images",
"permission_dialog_location_text": "Access to location information is required to use the add key function",
"permission_dialog_application": "application",
"permission_dialog_authority": "permission",
"permission_dialog_not_allowed": "Not Allowed",
"permission_dialog_allowed": "Allowed",
"permission_dialog_permission_denied": "Permission denied",
"permission_dialog_open_permissions": "Please manually enable it in the system settings",
"permission_dialog_permission_continue_text": "Permission to continue using the application.",
"permission_dialog_go_set_up": "Go set it up"
}

View File

@ -614,5 +614,22 @@
"地图加载中,请稍候。。": "地图加载中,请稍候。。",
"跳过": "跳过",
"还未获取到位置信息哦,请耐心等待一下!": "还未获取到位置信息哦,请耐心等待一下!",
"请填写信息": "请填写信息"
"请填写信息": "请填写信息",
"permission_dialog_camera": "相机",
"permission_dialog_photos": "相册",
"permission_dialog_storage": "读写",
"permission_dialog_location": "定位",
"permission_dialog_camera_text": "需要访问相机权限才能拍照上传文件例如头像上传",
"permission_dialog_photos_text": "需要访问相机权限才能使用相册图片上传文件上传头像",
"permission_dialog_storage_text": "需要访问读写权限才能使用本地图片上传头像",
"permission_dialog_location_text": "需要访问定位权限才能使用添加钥匙功能的位置信息",
"permission_dialog_application": "申请",
"permission_dialog_authority": "权限",
"permission_dialog_not_allowed": "不允许",
"permission_dialog_allowed": "允许",
"permission_dialog_permission_denied": "权限被拒绝",
"permission_dialog_open_permissions": "请手动在系统设置中开启",
"permission_dialog_permission_continue_text": "权限以继续使用应用。",
"permission_dialog_go_set_up": "去设置"
}

View File

@ -615,5 +615,22 @@
"地图加载中,请稍候。。": "地图加载中,请稍候。。",
"跳过": "跳过",
"还未获取到位置信息哦,请耐心等待一下!": "还未获取到位置信息哦,请耐心等待一下!",
"请填写信息": "请填写信息"
"请填写信息": "请填写信息",
"permission_dialog_camera": "相机",
"permission_dialog_photos": "相册",
"permission_dialog_storage": "读写",
"permission_dialog_location": "定位",
"permission_dialog_camera_text": "需要访问相机权限才能拍照上传文件例如头像上传",
"permission_dialog_photos_text": "需要访问相机权限才能使用相册图片上传文件上传头像",
"permission_dialog_storage_text": "需要访问读写权限才能使用本地图片上传头像",
"permission_dialog_location_text": "需要访问定位权限才能使用添加钥匙功能的位置信息",
"permission_dialog_application": "申请",
"permission_dialog_authority": "权限",
"permission_dialog_not_allowed": "不允许",
"permission_dialog_allowed": "允许",
"permission_dialog_permission_denied": "权限被拒绝",
"permission_dialog_open_permissions": "请手动在系统设置中开启",
"permission_dialog_permission_continue_text": "权限以继续使用应用。",
"permission_dialog_go_set_up": "去设置"
}

View File

@ -2,8 +2,12 @@ import 'dart:async';
import 'dart:io';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart';
import 'package:star_lock/permission/permission_dialog.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../tools/eventBusEventManage.dart';
@ -30,20 +34,24 @@ class MinePersonInfoLogic extends GetConnect {
size: size);
if (entity.errorCode!.codeIsSuccessful) {
uploadFile(entity);
// print("aaaaa:$loginEntity");
}
}
//
void uploadFile(MinePersonGetUploadFileInfoEntity minePersonGetUploadFileInfoEntity) async {
Map<String, dynamic> user = minePersonGetUploadFileInfoEntity.data!.formData!;
void uploadFile(
MinePersonGetUploadFileInfoEntity
minePersonGetUploadFileInfoEntity) async {
Map<String, dynamic> user =
minePersonGetUploadFileInfoEntity.data!.formData!;
var bytes = File(state.image!.path);
var enc = await bytes.readAsBytes();
user[minePersonGetUploadFileInfoEntity.data!.fileField!] = enc;
final form = FormData({
'file': MultipartFile(enc, filename: minePersonGetUploadFileInfoEntity.data!.formData!["key"]),
'file': MultipartFile(enc,
filename: minePersonGetUploadFileInfoEntity.data!.formData!["key"]),
});
var entity = await ApiRepository.to.uploadFile(url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form);
var entity = await ApiRepository.to.uploadFile(
url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form);
if (entity.errorCode! == -1) {
// null成功
updateUserInfoRequest(minePersonGetUploadFileInfoEntity.data!.fileUrl!);
@ -52,12 +60,10 @@ class MinePersonInfoLogic extends GetConnect {
//-
Future<void> updateUserInfoRequest(String headUrl) async {
var entity = await ApiRepository.to.updateUserHeadUrlInfo(
headUrl: headUrl
);
var entity = await ApiRepository.to.updateUserHeadUrlInfo(headUrl: headUrl);
if (entity.errorCode!.codeIsSuccessful) {
state.headUrl.value = headUrl;
state.mineInfoData.value.headUrl = state.headUrl.value!;
state.mineInfoData.value.headUrl = state.headUrl.value;
final loginData = await Storage.getLoginData();
loginData!.headUrl = headUrl;
await Storage.saveLoginData(loginData);
@ -66,11 +72,67 @@ class MinePersonInfoLogic extends GetConnect {
}
}
//
Future<void> chooseCallback(int index) async {
if (index == 0) {
//
_checkCameraPermission();
} else if (index == 1) {
_checkPhotoPermission();
}
}
///
Future<void> selectCamera() async {
XFile? photo = await state.imagePicker.pickImage(
source: ImageSource.camera, preferredCameraDevice: CameraDevice.rear);
if (photo != null) {
state.image = photo;
var bytes = File(state.image!.path);
var enc = await bytes.readAsBytes();
getUpTokenRequest(state.image!.name, enc.length);
}
}
///
Future<void> selectImage() async {
XFile? image = await state.imagePicker.pickImage(
source: ImageSource.gallery,
maxHeight: 250,
maxWidth: 250,
);
if (image != null) {
state.image = image;
var bytes = File(state.image!.path);
var enc = await bytes.readAsBytes();
getUpTokenRequest(state.image!.name, enc.length);
}
}
// 访
Future<void> _checkCameraPermission() async {
var status = await PermissionDialog.request(Permission.camera);
if (status) {
selectCamera();
}
}
// 访
Future<void> _checkPhotoPermission() async {
bool isAndroid33 =
AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
var status = isAndroid33
? await PermissionDialog.request(Permission.photos)
: await PermissionDialog.request(Permission.storage);
if (status) {
selectImage();
}
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
}
@override

View File

@ -25,31 +25,15 @@ class MinePersonInfoPage extends StatefulWidget {
State<MinePersonInfoPage> createState() => _MinePersonInfoPageState();
}
class _MinePersonInfoPageState extends State<MinePersonInfoPage>
// with WidgetsBindingObserver
{
class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
final logic = Get.put(MinePersonInfoLogic());
final state = Get.find<MinePersonInfoLogic>().state;
@override
initState() {
super.initState();
// WidgetsBinding.instance.addObserver(this); //
// logic.getUserInfoRequest();
// _checkCameraPermission();
// _checkPhotoPermission();
}
// //
// @override
// void didChangeAppLifecycleState(AppLifecycleState state) {
// super.didChangeAppLifecycleState(state);
// if (state == AppLifecycleState.resumed) {
// //
// checkCameraPermission();
// }
// }
@override
Widget build(BuildContext context) {
return Scaffold(
@ -71,32 +55,8 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
borderRadius: BorderRadius.circular(36.w),
child: CustomNetworkImage(url:state.headUrl.value, defaultUrl: 'images/controls_user.png', width:72.w, height:72.w),
),
// ClipOval(
// child: state.image != null
// ? Image.file(
// File(state.image!.path),
// width: 72.w,
// height: 72.w,
// fit: BoxFit.fill,
// )
// : Image.asset(
// 'images/controls_user.png',
// width: 72.w,
// height: 72.w,
// fit: BoxFit.fill,
// ),
// ),
action: () async {
//
if (Platform.isAndroid) {
AppFirstEnterHandle().getAppFirstEnter(context, isAgreeCamera);
var getFlag = await Storage.getString(isAgreeCamera);
if (getFlag == isAgreeCamera) {
_openModalBottomSheet();
}
} else {
_openModalBottomSheet();
}
_openModalBottomSheet();
},
)),
Obx(() => CommonItem(
@ -177,70 +137,9 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
));
}
// Future<void> requestCameraPermission() async {
// var status = await Permission.camera.status;
// if (status.isGranted) {
// selectCamera();
// } else {
// status = await Permission.camera.request();
// if (status.isGranted) {
// selectCamera();
// } else {
// showPermissionDeniedDialog();
// }
// }
// }
Future<void> _requestCameraPermission() async {
var status = await Permission.camera.request();
if (status.isGranted) {
setState(() {
state.hasCameraPermission.value = true; //
});
} else {
//
showPermissionDeniedDialog();
}
}
Future<void> _requestPhotoPermission() async {
//andriud33以下的设备兼容
bool isAndroid33 = AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
var status = isAndroid33 ? await Permission.photos.request() : await Permission.storage.request();
if (status.isGranted) {
setState(() {
state.hasPhotoPermission.value = true; //
});
} else {
//
showPermissionDeniedDialog();
}
//
// PermissionStatus photosStatus = await Permission.photos.request();
//
// if (photosStatus.isGranted) {
// //
// state.hasPhotoPermission.value = true;
// } else {
// //
// showPermissionDeniedDialog();
// }
}
// Future<void> requestPhotoPermission() async {
// var status = await Permission.photos.status;
// if (status.isGranted) {
// selectImage();
// } else {
// status = await Permission.photos.request();
// if (status.isGranted) {
// selectImage();
// } else {
// showPermissionDeniedDialog();
// }
// }
// }
//
void showPermissionDeniedDialog() {
@ -272,67 +171,13 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
return AlertBottomWidget(
topTitle: '',
items: const ['拍照', '从相册选择'],
chooseCallback: (value) {
int getSelectIndex = value;
if (getSelectIndex == 0) {
//
// state.hasCameraPermission.value == true ? selectCamera() : _requestCameraPermission();
_checkCameraPermission();
} else if (getSelectIndex == 1) {
// state.hasPhotoPermission.value == true ? selectImage() : _requestPhotoPermission();
_checkPhotoPermission();
}
},
chooseCallback: logic.chooseCallback,
);
});
}
///
selectCamera() async {
XFile? photo = await state.imagePicker.pickImage(source: ImageSource.camera, preferredCameraDevice: CameraDevice.rear);
if (photo != null) {
state.image = photo;
var bytes = File(state.image!.path);
var enc = await bytes.readAsBytes();
logic.getUpTokenRequest(state.image!.name, enc.length);
}
}
///
selectImage() async {
XFile? image = await state.imagePicker.pickImage(
source: ImageSource.gallery,
maxHeight: 250,
maxWidth: 250,
);
if (image != null) {
state.image = image;
var bytes = File(state.image!.path);
var enc = await bytes.readAsBytes();
logic.getUpTokenRequest(state.image!.name, enc.length);
}
}
Future<void> _checkCameraPermission() async {
var status = await Permission.camera.status;
if (status.isGranted) {
selectCamera();
} else {
_requestCameraPermission();
}
}
Future<void> _checkPhotoPermission() async {
var status = await Permission.photos.status;
if (status.isGranted) {
selectImage();
} else {
// setState(() {
// state.hasPhotoPermission.value = false; //
// });
_requestPhotoPermission();
}
}
@override
void dispose() {

View File

@ -0,0 +1,9 @@
## [permission_dialog.dart](permission_dialog.dart) 权限弹出的使用
```bash
//判断是否被拒绝,判断有权限后返回 true
var status = await PermissionDialog.request(Permission.camera);
if (status) {
selectCamera();
}
```

View File

@ -1,21 +1,28 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/translations/trans_lib.dart';
class PermissionDialog {
static Map<Permission, String> titles = {
Permission.camera: '相机',
Permission.photos: '相册',
Permission.storage: '读写',
Permission.location: '定位',
Permission.camera: TranslationLoader.lanKeys!.permissionDialogCamera!.tr,
Permission.photos: TranslationLoader.lanKeys!.permissionDialogPhotos!.tr,
Permission.storage: TranslationLoader.lanKeys!.permissionDialogStorage!.tr,
Permission.location:
TranslationLoader.lanKeys!.permissionDialogLocation!.tr,
};
static Map<Permission, String> contents = {
Permission.camera: '需要访问相机权限才能拍照上传文件例如头像上传',
Permission.photos: '需要访问相机权限才能使用相册图片上传文件上传头像',
Permission.storage: '需要访问读写权限才能使用本地图片上传头像',
Permission.location: '需要访问定位权限才能使用添加钥匙功能的位置信息',
Permission.camera:
TranslationLoader.lanKeys!.permissionDialogCameraText!.tr,
Permission.photos: TranslationLoader.lanKeys!.permissionDialogPhotos!.tr,
Permission.storage:
TranslationLoader.lanKeys!.permissionDialogStorageText!.tr,
Permission.location:
TranslationLoader.lanKeys!.permissionDialogLocationText!.tr,
};
//
@ -24,37 +31,51 @@ class PermissionDialog {
return false;
}
bool application = true;
if (AppPlatform.isAndroid) {
application = await showDialog(
PermissionStatus status = await permission.status;
dynamic cache = await Storage.getString(titles[permission]);
if (AppPlatform.isAndroid && !status.isGranted && cache is! String) {
application = await showCupertinoDialog(
context: Get.context!,
builder: (BuildContext context) {
return AlertDialog(
title: Text('申请${titles[permission] ?? ''}权限'),
content: Text(contents[permission] ?? ''),
actions: <Widget>[
TextButton(
child: const Text('不允许'),
onPressed: () {
Get.back(result: false);
},
),
TextButton(
child: const Text('允许'),
onPressed: () {
Get.back(result: true);
},
),
],
);
builder: (context) {
return PopScope(
canPop: false,
child: CupertinoAlertDialog(
title: Text(
'${TranslationLoader.lanKeys!.permissionDialogApplication!.tr}${titles[permission] ?? ''}${TranslationLoader.lanKeys!.permissionDialogAuthority!.tr}'),
content: Text(contents[permission] ?? ''),
actions: [
CupertinoDialogAction(
child: Text(TranslationLoader
.lanKeys!.permissionDialogNotAllowed!.tr),
onPressed: () {
Get.back(result: false);
},
),
CupertinoDialogAction(
child: Text(
TranslationLoader.lanKeys!.permissionDialogAllowed!.tr),
onPressed: () {
Get.back(result: true);
},
),
],
));
},
);
if(application){
await Storage.setString(titles[permission], titles[permission]);
}
} else if (cache is String) {
if (status.isDenied) {
showSet(permission);
return false;
}
}
if (!application) {
showSet(permission);
return false;
} else {
return await permission.request().isGranted;
if (application) {
PermissionStatus status = await permission.request();
return status.isGranted;
}
return false;
}
//
@ -62,22 +83,27 @@ class PermissionDialog {
if (Get.context == null) {
return;
}
showDialog(
showCupertinoDialog(
context: Get.context!,
builder: (BuildContext context) {
return AlertDialog(
title: Text('${titles[permission] ?? ''}权限被拒绝'),
content: Text('${contents[permission] ?? ''},请手动在系统设置中开启${titles[permission]}权限以继续使用应用。'),
actions: <Widget>[
TextButton(
child: Text('去设置'),
onPressed: () {
Get.back(); //
openAppSettings(); //
},
),
],
);
builder: (context) {
return PopScope(
canPop: false,
child: CupertinoAlertDialog(
title: Text(
'${titles[permission] ?? ''}${TranslationLoader.lanKeys!.permissionDialogPermissionDenied!.tr}'),
content: Text(
'${contents[permission] ?? ''}${TranslationLoader.lanKeys!.permissionDialogOpenPermissions!.tr}${titles[permission]}${TranslationLoader.lanKeys!.permissionDialogCameraText!.tr}'),
actions: [
CupertinoDialogAction(
child: Text(
TranslationLoader.lanKeys!.permissionDialogGoSetUp!.tr),
onPressed: () {
Get.back(); //
openAppSettings(); //
},
),
],
));
},
);
}

View File

@ -946,6 +946,24 @@ class LanKeyEntity {
judgmentMethodContent = json['judgmentMethodContent'];
stressPassword = json['stressPassword'];
stressCard = json['stressCard'];
permissionDialogCamera = json['permission_dialog_camera'];
permissionDialogPhotos = json['permission_dialog_photos'];
permissionDialogStorage = json['permission_dialog_storage'];
permissionDialogLocation = json['permission_dialog_location'];
permissionDialogCameraText = json['permission_dialog_camera_text'];
permissionDialogPhotosText = json['permission_dialog_photos_text'];
permissionDialogStorageText = json['permission_dialog_storage_text'];
permissionDialogLocationText = json['permission_dialog_location_text'];
permissionDialogApplication = json['permission_dialog_application'];
permissionDialogAuthority = json['permission_dialog_authority'];
permissionDialogNotAllowed = json['permission_dialog_not_allowed'];
permissionDialogAllowed = json['permission_dialog_allowed'];
permissionDialogPermissionDenied = json['permission_dialog_permission_denied'];
permissionDialogOpenPermissions = json['permission_dialog_open_permissions'];
permissionDialogPermissionContinueText = json['permission_dialog_permission_continue_text'];
permissionDialogGoSetUp = json['permission_dialog_go_set_up'];
}
String? starLock;
String? clickUnlockAndHoldDownClose;
@ -1424,6 +1442,23 @@ class LanKeyEntity {
String? stressPassword;
String? stressCard;
String? permissionDialogCamera;
String? permissionDialogPhotos;
String? permissionDialogStorage;
String? permissionDialogLocation;
String? permissionDialogCameraText;
String? permissionDialogPhotosText;
String? permissionDialogStorageText;
String? permissionDialogLocationText;
String? permissionDialogApplication;
String? permissionDialogAuthority;
String? permissionDialogNotAllowed;
String? permissionDialogAllowed;
String? permissionDialogPermissionDenied;
String? permissionDialogOpenPermissions;
String? permissionDialogPermissionContinueText;
String? permissionDialogGoSetUp;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['starLock'] = starLock;
@ -1913,6 +1948,23 @@ class LanKeyEntity {
map['stressPassword'] = stressPassword;
map['stressCard'] = stressCard;
map['permission_dialog_camera'] = permissionDialogCamera;
map['permission_dialog_photos'] = permissionDialogPhotos;
map['permission_dialog_storage'] = permissionDialogStorage;
map['permission_dialog_location'] = permissionDialogLocation;
map['permission_dialog_camera_text'] = permissionDialogCameraText;
map['permission_dialog_photos_text'] = permissionDialogPhotosText;
map['permission_dialog_storage_text'] = permissionDialogStorageText;
map['permission_dialog_location_text'] = permissionDialogLocationText;
map['permission_dialog_application'] = permissionDialogApplication;
map['permission_dialog_authority'] = permissionDialogAuthority;
map['permission_dialog_not_allowed'] = permissionDialogNotAllowed;
map['permission_dialog_allowed'] = permissionDialogAllowed;
map['permission_dialog_permission_denied'] = permissionDialogPermissionDenied;
map['permission_dialog_open_permissions'] = permissionDialogOpenPermissions;
map['permission_dialog_permission_continue_text'] = permissionDialogPermissionContinueText;
map['permission_dialog_go_set_up'] = permissionDialogGoSetUp;
return map;
}
}