修改拍照头像上传慢的问题

This commit is contained in:
魏少阳 2024-06-03 15:23:03 +08:00
parent 0fe024bc9f
commit 0e38550b94
5 changed files with 38 additions and 30 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -1,14 +1,19 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data';
import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/login/login/entity/LoginData.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.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/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart';
import 'package:star_lock/widget/permission/permission_dialog.dart'; import 'package:star_lock/widget/permission/permission_dialog.dart';
import '../../../../network/api_repository.dart'; import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';
import '../../../app_settings/app_settings.dart';
import '../../../tools/eventBusEventManage.dart'; import '../../../tools/eventBusEventManage.dart';
import '../../../tools/storage.dart'; import '../../../tools/storage.dart';
import 'minePersonGetUploadFileInfo_entity.dart'; import 'minePersonGetUploadFileInfo_entity.dart';
@ -18,7 +23,7 @@ class MinePersonInfoLogic extends BaseGetXController {
// //
Future<void> getUserInfoRequest() async { Future<void> getUserInfoRequest() async {
MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo(); final MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo();
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.mineInfoData.value = entity.data!; state.mineInfoData.value = entity.data!;
state.headUrl.value = state.mineInfoData.value.headUrl!; state.headUrl.value = state.mineInfoData.value.headUrl!;
@ -27,7 +32,7 @@ class MinePersonInfoLogic extends BaseGetXController {
// upToken updateUserInfo // upToken updateUserInfo
Future<void> getUpTokenRequest(String filename, int size) async { Future<void> getUpTokenRequest(String filename, int size) async {
var entity = await ApiRepository.to.getUpToken( final MinePersonGetUploadFileInfoEntity entity = await ApiRepository.to.getUpToken(
userId: state.mineInfoData.value.uid!.toString(), userId: state.mineInfoData.value.uid!.toString(),
filename: filename, filename: filename,
size: size); size: size);
@ -41,18 +46,18 @@ class MinePersonInfoLogic extends BaseGetXController {
MinePersonGetUploadFileInfoEntity MinePersonGetUploadFileInfoEntity
minePersonGetUploadFileInfoEntity) async { minePersonGetUploadFileInfoEntity) async {
// Map<String, dynamic> user = minePersonGetUploadFileInfoEntity.data!.formData!; // Map<String, dynamic> user = minePersonGetUploadFileInfoEntity.data!.formData!;
var bytes = File(state.image!.path); final File bytes = File(state.image!.path);
var enc = await bytes.readAsBytes(); final Uint8List enc = await bytes.readAsBytes();
// user[minePersonGetUploadFileInfoEntity.data!.fileField!] = enc; // user[minePersonGetUploadFileInfoEntity.data!.fileField!] = enc;
final form = FormData(minePersonGetUploadFileInfoEntity.data!.formData!); final FormData form = FormData(minePersonGetUploadFileInfoEntity.data!.formData!);
form.files.add(MapEntry( form.files.add(MapEntry(
minePersonGetUploadFileInfoEntity.data!.fileField!, minePersonGetUploadFileInfoEntity.data!.fileField!,
MultipartFile(enc, MultipartFile(enc,
filename: filename:
minePersonGetUploadFileInfoEntity.data!.formData!["key"]))); minePersonGetUploadFileInfoEntity.data!.formData!['key'])));
var entity = await ApiRepository.to.uploadFile( final LoginEntity entity = await ApiRepository.to.uploadFile(
url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form); url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form);
if (entity.errorCode! == -1) { if (entity.errorCode! == -1) {
// null成功 // null成功
@ -62,15 +67,15 @@ class MinePersonInfoLogic extends BaseGetXController {
//- //-
Future<void> updateUserInfoRequest(String headUrl) async { Future<void> updateUserInfoRequest(String headUrl) async {
var entity = await ApiRepository.to.updateUserHeadUrlInfo(headUrl: headUrl); final PasswordKeyListEntity entity = await ApiRepository.to.updateUserHeadUrlInfo(headUrl: headUrl);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.headUrl.value = headUrl; state.headUrl.value = headUrl;
state.mineInfoData.value.headUrl = state.headUrl.value; state.mineInfoData.value.headUrl = state.headUrl.value;
final loginData = await Storage.getLoginData(); final LoginData? loginData = await Storage.getLoginData();
loginData!.headUrl = headUrl; loginData!.headUrl = headUrl;
await Storage.saveLoginData(loginData); await Storage.saveLoginData(loginData);
eventBus.fire(MineInfoChangeRefreshUI()); eventBus.fire(MineInfoChangeRefreshUI());
showToast("上传成功".tr); showToast('上传成功'.tr);
} }
} }
@ -86,34 +91,38 @@ class MinePersonInfoLogic extends BaseGetXController {
/// ///
Future<void> selectCamera() async { Future<void> selectCamera() async {
XFile? photo = await state.imagePicker.pickImage( final XFile? photo = await state.imagePicker.pickImage(
source: ImageSource.camera, preferredCameraDevice: CameraDevice.rear); source: ImageSource.camera,
maxHeight: 250,
maxWidth: 250,
imageQuality: 80
);
if (photo != null) { if (photo != null) {
state.image = photo; state.image = photo;
var bytes = File(state.image!.path); final File bytes = File(state.image!.path);
var enc = await bytes.readAsBytes(); final Uint8List enc = await bytes.readAsBytes();
getUpTokenRequest(state.image!.name, enc.length); getUpTokenRequest(state.image!.name, enc.length);
} }
} }
/// ///
Future<void> selectImage() async { Future<void> selectImage() async {
XFile? image = await state.imagePicker.pickImage( final XFile? image = await state.imagePicker.pickImage(
source: ImageSource.gallery, source: ImageSource.gallery,
maxHeight: 250, maxHeight: 250,
maxWidth: 250, maxWidth: 250,
); );
if (image != null) { if (image != null) {
state.image = image; state.image = image;
var bytes = File(state.image!.path); final File bytes = File(state.image!.path);
var enc = await bytes.readAsBytes(); final Uint8List enc = await bytes.readAsBytes();
getUpTokenRequest(state.image!.name, enc.length); getUpTokenRequest(state.image!.name, enc.length);
} }
} }
// 访 // 访
Future<void> _checkCameraPermission() async { Future<void> _checkCameraPermission() async {
var status = await PermissionDialog.request(Permission.camera); final bool status = await PermissionDialog.request(Permission.camera);
if (status) { if (status) {
selectCamera(); selectCamera();
} }
@ -121,7 +130,7 @@ class MinePersonInfoLogic extends BaseGetXController {
// 访 // 访
Future<void> _checkPhotoPermission() async { Future<void> _checkPhotoPermission() async {
var status = await PermissionDialog.requestPhotos(); final bool status = await PermissionDialog.requestPhotos();
if (status) { if (status) {
selectImage(); selectImage();
} }
@ -129,13 +138,11 @@ class MinePersonInfoLogic extends BaseGetXController {
@override @override
void onReady() { void onReady() {
// TODO: implement onReady
super.onReady(); super.onReady();
} }
@override @override
void onInit() { void onInit() {
// TODO: implement onInit
super.onInit(); super.onInit();
getUserInfoRequest(); getUserInfoRequest();
@ -143,6 +150,5 @@ class MinePersonInfoLogic extends BaseGetXController {
@override @override
void onClose() { void onClose() {
// TODO: implement onClose
} }
} }

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';

View File

@ -1,12 +1,13 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';
class MinePersonInfoState { class MinePersonInfoState {
final mineInfoData = MinePersonInfoData().obs; final Rx<MinePersonInfoData> mineInfoData = MinePersonInfoData().obs;
final headUrl = ''.obs; final RxString headUrl = ''.obs;
var typeStr = '2'.obs; //2: RxString typeStr = '2'.obs; //2:
// ImagePicker获取内容后返回的对象是XFile // ImagePicker获取内容后返回的对象是XFile
XFile? image; XFile? image;
@ -14,8 +15,8 @@ class MinePersonInfoState {
// 使ImagePicker前必须先实例化 // 使ImagePicker前必须先实例化
final ImagePicker imagePicker = ImagePicker(); final ImagePicker imagePicker = ImagePicker();
var hasPhotoPermission = false.obs; // RxBool hasPhotoPermission = false.obs; //
var hasCameraPermission = false.obs; // RxBool hasCameraPermission = false.obs; //
} }

View File

@ -205,7 +205,8 @@ dependencies:
file_picker: ^5.3.1 file_picker: ^5.3.1
# 错误日志监控 # 错误日志监控
flutter_bugly_plugin: ^0.0.9 flutter_bugly_plugin: ^0.0.9
# 图片压缩
flutter_image_compress: ^2.3.0
dependency_overrides: dependency_overrides:
#强制设置google_maps_flutter_ios 为 2.5.2 #强制设置google_maps_flutter_ios 为 2.5.2