people_photo_controller.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import 'package:clean/base/base_controller.dart';
  2. import 'package:clean/data/bean/photos_type.dart';
  3. import 'package:clean/module/image_picker/image_picker_util.dart';
  4. import 'package:clean/module/people_photo/photo_group.dart';
  5. import 'package:clean/module/photo_preview/photo_preview_view.dart';
  6. import 'package:get/get.dart';
  7. import 'package:wechat_assets_picker/wechat_assets_picker.dart';
  8. class PeoplePhotoController extends BaseController {
  9. final RxList<PhotoGroup> photoGroups = <PhotoGroup>[].obs;
  10. final RxDouble selectedFilesSize = 0.0.obs;
  11. final RxInt selectedFileCount = 0.obs;
  12. @override
  13. void onInit() {
  14. super.onInit();
  15. loadPeoplePhoto();
  16. restoreSelections();
  17. }
  18. @override
  19. void onReady() {
  20. super.onReady();
  21. }
  22. Future<void> updateSelectedFilesSize() async {
  23. double totalSize = 0;
  24. // 通过selectedPhotosIds获取选中的图片,然后计算大小
  25. for (var id in ImagePickerUtil.selectedPeoplePhotosIds) {
  26. final entity = await AssetEntity.fromId(id);
  27. if (entity != null) {
  28. final file = await entity.file;
  29. if (file != null) {
  30. totalSize += await file.length();
  31. }
  32. }
  33. }
  34. selectedFilesSize.value = totalSize / 1024; // Convert to KB
  35. }
  36. void toggleImageSelection(List<AssetEntity> groupTitle, int imageIndex) async {
  37. final group = getGroupByImages(groupTitle);
  38. final image = group.images[imageIndex];
  39. final selected = !group.selectedImages[imageIndex];
  40. group.selectedImages[imageIndex] = selected;
  41. _updateSelectedPeoplePhotosIds(image.id, selected);
  42. group.isSelected.value = group.selectedImages.every((selected) => selected);
  43. selectedFileCount.value = ImagePickerUtil.selectedPeoplePhotosIds.length;
  44. await updateSelectedFilesSize();
  45. }
  46. void clickImage(List<AssetEntity> images, int imageIndex) {
  47. final group = getGroupByImages(images);
  48. final image = group.images[imageIndex];
  49. PhotoPreviewPage.start(PhotosType.peoplePhotos, image.id);
  50. }
  51. void toggleGroupSelection(List<AssetEntity> images) async {
  52. final group = getGroupByImages(images);
  53. final newValue = !group.isSelected.value;
  54. group.toggleSelectAll(newValue);
  55. for (var image in group.images) {
  56. _updateSelectedPeoplePhotosIds(image.id, newValue);
  57. }
  58. selectedFileCount.value = ImagePickerUtil.selectedPeoplePhotosIds.length;
  59. updateSelectedFilesSize();
  60. }
  61. PhotoGroup _getGroupByTitle(String groupTitle) {
  62. return photoGroups.firstWhere((g) => g.title == groupTitle);
  63. }
  64. PhotoGroup getGroupByImages(List<AssetEntity> images) {
  65. final imageIds = images.map((img) => img.id).toSet();
  66. return photoGroups.firstWhere((group) =>
  67. group.images.every((image) => imageIds.contains(image.id))
  68. );
  69. }
  70. void _updateSelectedPeoplePhotosIds(String photoId, bool isSelected) {
  71. if (isSelected) {
  72. // 检查这个id有没有在这个list里面
  73. if (!ImagePickerUtil.selectedPeoplePhotosIds.contains(photoId)) {
  74. ImagePickerUtil.selectedPeoplePhotosIds.add(photoId);
  75. }
  76. } else {
  77. ImagePickerUtil.selectedPeoplePhotosIds.remove(photoId);
  78. }
  79. }
  80. void restoreSelections() async {
  81. print("PeoplePhotoController restoreSelections");
  82. for (var group in photoGroups) {
  83. for (int i = 0; i < group.images.length; i++) {
  84. if (ImagePickerUtil.selectedPeoplePhotosIds
  85. .contains(group.images[i].id)) {
  86. group.selectedImages[i] = true;
  87. } else {
  88. group.selectedImages[i] = false;
  89. }
  90. }
  91. group.isSelected.value =
  92. group.selectedImages.every((selected) => selected);
  93. }
  94. updateSelectedFilesSize();
  95. selectedFileCount.value = ImagePickerUtil.selectedPeoplePhotosIds.length;
  96. }
  97. void loadPeoplePhoto() {
  98. print("loadPeoplePhoto");
  99. photoGroups.clear();
  100. final photoGroup = ImagePickerUtil.peoplePhotos;
  101. if (photoGroup.isNotEmpty) {
  102. photoGroups.add(PhotoGroup(
  103. title: 'photo : ${photoGroup.length}',
  104. imageCount: photoGroup.length,
  105. isSelected: false,
  106. images: photoGroup,
  107. ));
  108. }
  109. }
  110. }