import 'dart:convert'; import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:fis_common/index.dart'; import 'package:get/get.dart'; import 'package:vitalapp/architecture/defines.dart'; import 'package:vitalapp/architecture/storage/storage.dart'; import 'package:vitalapp/architecture/utils/prompt_box.dart'; import 'package:vitalapp/managers/interfaces/account.dart'; import 'package:vitalapp/managers/interfaces/doctor.dart'; import 'package:vitalapp/pages/home/personal_center/state.dart'; import 'package:vitalapp/rpc.dart'; import 'package:vitalapp/store/store.dart'; import 'package:fis_common/helpers/encrypt.dart'; import 'package:universal_html/html.dart' as html; class PersonalCenterController extends FControllerBase { final state = PersonalCenterState(); final _accountManager = Get.find(); @override void onReady() { super.onReady(); _loadData(); _updateSignature(Store.user.signature); } void _loadData() async { var result = await _accountManager.getUserDetailAsync(); if (result != null) { state.updateDto(result); } } /// 重新签名 Future rewrite() async { final result = await Get.toNamed("/contract/signature"); if (result != null) { final saved = await Get.find().setSignature(result); if (saved) { _updateSignature(result); } else { PromptBox.toast("设置签名失败"); } } } void _updateSignature(String value) { state.signaturUrl = value; } Future updateUserInfo() async { state.dto.realName = state.name; state.dto.phone = state.phone; state.dto.headImageToken = state.headImageToken; final result = await _accountManager.updateUserAsync(state.dto); return result; } Future setPassword() async { final oldPassword = await _accountManager.getUserPasswordDetailAsync(); var oldPasswordEncrypt = FEncryptHelper.symmetryEncrypt(state.oldPassword); if (state.oldPassword.isEmpty) { PromptBox.toast("原密码不能为空!"); return; } if (state.newPassword.isEmpty) { PromptBox.toast("新密码不能为空!"); return; } if (state.confirmPassword.isEmpty) { PromptBox.toast("确认密码密码不能为空!"); return; } if (oldPassword != oldPasswordEncrypt) { PromptBox.toast("原密码输入错误!"); return; } if (state.newPassword != state.confirmPassword) { PromptBox.toast("密码输入不一致!"); return; } var newPassword = FEncryptHelper.symmetryEncrypt(state.newPassword); if (oldPasswordEncrypt == newPassword) { PromptBox.toast('新密码不能与旧密码相同!'); return; } final result = await _accountManager.updateUserPasswordAsync(newPassword); if (result) { PromptBox.toast("密码更新成功!"); } } Future clear() async { final saved = await Get.find().setSignature(''); if (saved) { state.signaturUrl = null; PromptBox.toast("更新成功!"); } } Future chooseImage() async { final files = await FilePicker.platform.pickFiles(type: FileType.image); if (files != null && files.files.first.bytes != null) { // 这里获取到的是一个File对象,你可以根据需要进行处理 // 例如,将文件路径传递给Image组件进行显示 var imageBytes = files.files.first.bytes!; // 接下来,你可以将imagePath传递给Image组件 // if (kIsWeb) { print(imageBytes); String base64String = base64Encode(imageBytes); final file = convertBase64ToFile(base64String); var result = await rpc.storage.webUpload(file!); if (result != null) { final saved = await Get.find().setSignature(result); if (saved) { _updateSignature(result); } else { PromptBox.toast("设置签名失败"); } } // } } } Future imageToBase64(String imagePath) async { final file = File(imagePath); List imageBytes = await file.readAsBytes(); String base64String = base64Encode(imageBytes); return base64String; } html.File? convertBase64ToFile(String base64Image) { try { final bytes = base64Decode(base64Image); const mimeType = 'image/jpeg'; // 替换为您的图片类型 final blob = html.Blob([bytes], mimeType); final file = html.File([blob], 'image.jpg'); // 替换为您的文件名 return file; } catch (e) { print('Error converting base64 to File: $e'); return null; } } }