import 'dart:async'; import 'dart:io'; 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'; import '../../../tools/storage.dart'; import 'minePersonGetUploadFileInfo_entity.dart'; class MinePersonInfoLogic extends BaseGetXController { MinePersonInfoState state = MinePersonInfoState(); //用户信息 Future getUserInfoRequest() async { MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo(); if (entity.errorCode!.codeIsSuccessful) { state.mineInfoData.value = entity.data!; state.headUrl.value = state.mineInfoData.value.headUrl!; } } //上传头像 先获取upToken 再调用updateUserInfo Future getUpTokenRequest(String filename, int size) async { var entity = await ApiRepository.to.getUpToken( userId: state.mineInfoData.value.uid!.toString(), filename: filename, size: size); if (entity.errorCode!.codeIsSuccessful) { uploadFile(entity); } } // 上传头像 void uploadFile( MinePersonGetUploadFileInfoEntity minePersonGetUploadFileInfoEntity) async { // Map user = minePersonGetUploadFileInfoEntity.data!.formData!; var bytes = File(state.image!.path); var enc = await bytes.readAsBytes(); // user[minePersonGetUploadFileInfoEntity.data!.fileField!] = enc; final form = FormData(minePersonGetUploadFileInfoEntity.data!.formData!); form.files.add(MapEntry( minePersonGetUploadFileInfoEntity.data!.fileField!, MultipartFile(enc, filename: minePersonGetUploadFileInfoEntity.data!.formData!["key"]))); var entity = await ApiRepository.to.uploadFile( url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form); if (entity.errorCode! == -1) { // 没有返回 返回null成功 updateUserInfoRequest(minePersonGetUploadFileInfoEntity.data!.fileUrl!); } } //更新个人信息-头像 Future updateUserInfoRequest(String headUrl) async { var entity = await ApiRepository.to.updateUserHeadUrlInfo(headUrl: headUrl); if (entity.errorCode!.codeIsSuccessful) { state.headUrl.value = headUrl; state.mineInfoData.value.headUrl = state.headUrl.value; final loginData = await Storage.getLoginData(); loginData!.headUrl = headUrl; await Storage.saveLoginData(loginData); eventBus.fire(MineInfoChangeRefreshUI()); showToast("上传成功".tr); } } //上传头像选择 Future chooseCallback(int index) async { if (index == 0) { //拍照选项 _checkCameraPermission(); } else if (index == 1) { _checkPhotoPermission(); } } ///拍摄照片 Future 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 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 _checkCameraPermission() async { var status = await PermissionDialog.request(Permission.camera); if (status) { selectCamera(); } } //权限判断 访问相册 Future _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 void onInit() { // TODO: implement onInit super.onInit(); getUserInfoRequest(); } @override void onClose() { // TODO: implement onClose } }