calendar_month_controller.dart 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import 'package:clean/base/base_controller.dart';
  2. import 'package:get/get.dart';
  3. import 'package:wechat_assets_picker/wechat_assets_picker.dart';
  4. import '../image_picker/image_picker_util.dart';
  5. import '../people_photo/photo_group.dart';
  6. class CalendarMonthController extends BaseController {
  7. late final Rx<PhotoGroup> photoGroup =
  8. PhotoGroup(isSelected: false, images: []).obs;
  9. final RxDouble selectedFilesSize = 0.0.obs;
  10. RxInt selectedFileCount = 0.obs;
  11. final RxSet<String> selectedPhotosIds = <String>{}.obs;
  12. // 是否是选择模式
  13. RxBool isSelectMode = false.obs;
  14. @override
  15. void onInit() {
  16. _getArgs();
  17. super.onInit();
  18. }
  19. void _getArgs() {
  20. final parameters = Get.arguments;
  21. photoGroup.value = parameters?['PhotoGroup'] as PhotoGroup;
  22. }
  23. clickBack() {
  24. print('CalendarMonthController clickBack');
  25. Get.back();
  26. }
  27. // 切换图片组选中状态
  28. void toggleGroupSelection(List<AssetEntity> imagesList) {
  29. final newValue = !photoGroup.value.isSelected.value;
  30. photoGroup.value.toggleSelectAll(newValue);
  31. for (var image in photoGroup.value.images) {
  32. updateSelectedPhotosIds(image.id, newValue);
  33. }
  34. selectedFileCount.value = selectedPhotosIds.length;
  35. updateSelectedFilesSize();
  36. }
  37. Future<void> updateSelectedFilesSize() async {
  38. // 如果没有选中的文件,直接返回
  39. if (selectedFileCount.value == 0) {
  40. selectedFilesSize.value = 0;
  41. return;
  42. }
  43. double totalSize = 0;
  44. for (int i = 0; i < photoGroup.value.images.length; i++) {
  45. if (photoGroup.value.selectedImages[i]) {
  46. // 检查缓存
  47. final assetId = photoGroup.value.images[i].id;
  48. if (ImagePickerUtil.fileSizeCache.containsKey(assetId)) {
  49. totalSize += ImagePickerUtil.fileSizeCache[assetId]!;
  50. } else {
  51. final file = await photoGroup.value.images[i].file;
  52. if (file != null) {
  53. final size = (await file.length()) / 1024; // 转换为KB
  54. totalSize += size;
  55. ImagePickerUtil.fileSizeCache[assetId] = size;
  56. }
  57. }
  58. }
  59. }
  60. selectedFilesSize.value = totalSize;
  61. print("selectedFilesSize: $selectedFilesSize");
  62. PhotoManager.clearFileCache();
  63. }
  64. void updateSelectedPhotosIds(String photoId, bool isSelected) {
  65. if (isSelected) {
  66. selectedPhotosIds.add(photoId);
  67. } else {
  68. selectedPhotosIds.remove(photoId);
  69. }
  70. }
  71. clickImage(List<AssetEntity> images, int imageIndex) {
  72. print("CalendarMonthController clickImage");
  73. }
  74. Future<void> toggleImageSelection(
  75. List<AssetEntity> groupTitle, int imageIndex) async {
  76. print("BasePhotoController toggleImageSelection");
  77. final image = photoGroup.value.images[imageIndex];
  78. final selected = !photoGroup.value.selectedImages[imageIndex];
  79. photoGroup.value.selectedImages[imageIndex] = selected;
  80. updateSelectedPhotosIds(image.id, selected);
  81. photoGroup.value.isSelected.value =
  82. photoGroup.value.selectedImages.every((selected) => selected);
  83. selectedFileCount.value = selectedPhotosIds.length;
  84. // 更新文件大小
  85. if (selected) {
  86. // 如果选中,增加文件大小
  87. if (ImagePickerUtil.fileSizeCache.containsKey(image.id)) {
  88. selectedFilesSize.value += ImagePickerUtil.fileSizeCache[image.id]!;
  89. } else {
  90. final file = await image.file;
  91. if (file != null) {
  92. selectedFilesSize.value += (await file.length()) / 1024; // 转换为KB
  93. }
  94. }
  95. } else {
  96. // 如果取消选中,减少文件大小
  97. if (ImagePickerUtil.fileSizeCache.containsKey(image.id)) {
  98. selectedFilesSize.value -= ImagePickerUtil.fileSizeCache[image.id]!;
  99. } else {
  100. final file = await image.file;
  101. if (file != null) {
  102. selectedFilesSize.value -= (await file.length()) / 1024; // 转换为KB
  103. }
  104. }
  105. }
  106. PhotoManager.clearFileCache();
  107. }
  108. // 将selectedFilesSize转成String类型,然后单位转换,如果超过1MB,则转成MB,超过1GB,则转成GB,否则KB
  109. String get selectedFilesSizeString {
  110. if (selectedFilesSize.value > 1024) {
  111. return "${(selectedFilesSize.value / 1024).toStringAsFixed(2)}MB";
  112. } else if (selectedFilesSize.value > 1024 * 1024) {
  113. return "${(selectedFilesSize.value / 1024 / 1024).toStringAsFixed(2)}GB";
  114. } else {
  115. return "${(selectedFilesSize.value).toStringAsFixed(2)}KB";
  116. }
  117. }
  118. }