controller.dart 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'package:file_picker/file_picker.dart';
  4. import 'package:fis_common/index.dart';
  5. import 'package:get/get.dart';
  6. import 'package:vitalapp/architecture/defines.dart';
  7. import 'package:vitalapp/architecture/storage/storage.dart';
  8. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  9. import 'package:vitalapp/managers/interfaces/account.dart';
  10. import 'package:vitalapp/managers/interfaces/doctor.dart';
  11. import 'package:vitalapp/pages/home/personal_center/state.dart';
  12. import 'package:vitalapp/rpc.dart';
  13. import 'package:vitalapp/store/store.dart';
  14. import 'package:fis_common/helpers/encrypt.dart';
  15. import 'package:universal_html/html.dart' as html;
  16. class PersonalCenterController extends FControllerBase {
  17. final state = PersonalCenterState();
  18. final _accountManager = Get.find<IAccountManager>();
  19. @override
  20. void onReady() {
  21. super.onReady();
  22. _loadData();
  23. _updateSignature(Store.user.signature);
  24. }
  25. void _loadData() async {
  26. var result = await _accountManager.getUserDetailAsync();
  27. if (result != null) {
  28. state.updateDto(result);
  29. }
  30. }
  31. /// 重新签名
  32. Future<void> rewrite() async {
  33. final result = await Get.toNamed("/contract/signature");
  34. if (result != null) {
  35. final saved = await Get.find<IDoctorManager>().setSignature(result);
  36. if (saved) {
  37. _updateSignature(result);
  38. } else {
  39. PromptBox.toast("设置签名失败");
  40. }
  41. }
  42. }
  43. void _updateSignature(String value) {
  44. state.signaturUrl = value;
  45. }
  46. Future<bool> updateUserInfo() async {
  47. state.dto.realName = state.name;
  48. state.dto.phone = state.phone;
  49. state.dto.headImageToken = state.headImageToken;
  50. final result = await _accountManager.updateUserAsync(state.dto);
  51. return result;
  52. }
  53. Future<void> setPassword() async {
  54. final oldPassword = await _accountManager.getUserPasswordDetailAsync();
  55. var oldPasswordEncrypt = FEncryptHelper.symmetryEncrypt(state.oldPassword);
  56. if (state.oldPassword.isEmpty) {
  57. PromptBox.toast("原密码不能为空!");
  58. return;
  59. }
  60. if (state.newPassword.isEmpty) {
  61. PromptBox.toast("新密码不能为空!");
  62. return;
  63. }
  64. if (state.confirmPassword.isEmpty) {
  65. PromptBox.toast("确认密码密码不能为空!");
  66. return;
  67. }
  68. if (oldPassword != oldPasswordEncrypt) {
  69. PromptBox.toast("原密码输入错误!");
  70. return;
  71. }
  72. if (state.newPassword != state.confirmPassword) {
  73. PromptBox.toast("密码输入不一致!");
  74. return;
  75. }
  76. var newPassword = FEncryptHelper.symmetryEncrypt(state.newPassword);
  77. if (oldPasswordEncrypt == newPassword) {
  78. PromptBox.toast('新密码不能与旧密码相同!');
  79. return;
  80. }
  81. final result = await _accountManager.updateUserPasswordAsync(newPassword);
  82. if (result) {
  83. PromptBox.toast("密码更新成功!");
  84. }
  85. }
  86. Future<void> clear() async {
  87. final saved = await Get.find<IDoctorManager>().setSignature('');
  88. if (saved) {
  89. state.signaturUrl = null;
  90. PromptBox.toast("更新成功!");
  91. }
  92. }
  93. Future<void> chooseImage() async {
  94. final files = await FilePicker.platform.pickFiles(type: FileType.image);
  95. if (files != null && files.files.first.bytes != null) {
  96. // 这里获取到的是一个File对象,你可以根据需要进行处理
  97. // 例如,将文件路径传递给Image组件进行显示
  98. var imageBytes = files.files.first.bytes!;
  99. // 接下来,你可以将imagePath传递给Image组件
  100. // if (kIsWeb) {
  101. print(imageBytes);
  102. String base64String = base64Encode(imageBytes);
  103. final file = convertBase64ToFile(base64String);
  104. var result = await rpc.storage.webUpload(file!);
  105. if (result != null) {
  106. final saved = await Get.find<IDoctorManager>().setSignature(result);
  107. if (saved) {
  108. _updateSignature(result);
  109. } else {
  110. PromptBox.toast("设置签名失败");
  111. }
  112. }
  113. // }
  114. }
  115. }
  116. Future<String> imageToBase64(String imagePath) async {
  117. final file = File(imagePath);
  118. List<int> imageBytes = await file.readAsBytes();
  119. String base64String = base64Encode(imageBytes);
  120. return base64String;
  121. }
  122. html.File? convertBase64ToFile(String base64Image) {
  123. try {
  124. final bytes = base64Decode(base64Image);
  125. const mimeType = 'image/jpeg'; // 替换为您的图片类型
  126. final blob = html.Blob([bytes], mimeType);
  127. final file = html.File([blob], 'image.jpg'); // 替换为您的文件名
  128. return file;
  129. } catch (e) {
  130. print('Error converting base64 to File: $e');
  131. return null;
  132. }
  133. }
  134. }