similar_photo_controller.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import 'dart:io';
  2. import 'package:clean/base/base_controller.dart';
  3. import 'package:clean/base/base_photo_controller.dart';
  4. import 'package:clean/data/bean/photos_type.dart';
  5. import 'package:clean/module/image_picker/image_picker_util.dart';
  6. import 'package:clean/module/people_photo/photo_group.dart';
  7. import 'package:clean/module/photo_preview/photo_preview_view.dart';
  8. import 'package:clean/utils/toast_util.dart';
  9. import 'package:get/get.dart';
  10. import 'package:wechat_assets_picker/wechat_assets_picker.dart';
  11. class SimilarPhotoController extends BasePhotoController {
  12. @override
  13. void loadPhotos() {
  14. photoGroups.clear();
  15. photoGroups.addAll(
  16. ImagePickerUtil.similarPhotos.where((group) => group.isNotEmpty).map(
  17. (group) {
  18. return PhotoGroup(
  19. isSelected: true,
  20. images: group,
  21. );
  22. },
  23. ),
  24. );
  25. for (var group in photoGroups) {
  26. for (int i = 0; i < group.images.length; i++) {
  27. group.selectedImages[i] = i == 0 ? false : true;
  28. updateSelectedPhotosIds(group.images[i].id, i != 0);
  29. }
  30. }
  31. ImagePickerUtil.selectedSimilarPhotosIds.assignAll(selectedPhotosIds);
  32. }
  33. // 点击删除单组选中的图片
  34. void clickSingleGroupDelete(List<AssetEntity> images) async {
  35. // 获取指定组
  36. final group = getGroupByImages(images);
  37. // 获取该组中所有选中的图片
  38. final selectedImages = group.images
  39. .where((image) => group.selectedImages[group.images.indexOf(image)])
  40. .toList();
  41. if (selectedImages.isEmpty) {
  42. ToastUtil.show('Please select the photo to delete');
  43. return;
  44. }
  45. try {
  46. // 执行删除操作
  47. final List<String> result = await PhotoManager.editor.deleteWithIds(
  48. selectedImages.map((e) => e.id).toList(),
  49. );
  50. // 检查删除成功的图片数量
  51. if (result.length == selectedImages.length) {
  52. // 先删除该组的图片,再更新selectedImages和selectedPhotosIds
  53. List<AssetEntity> imagesToRemove = [];
  54. List<int> indexesToRemove = [];
  55. for (var image in selectedImages) {
  56. // 找到图片在该组中的索引
  57. int index = group.images.indexOf(image);
  58. imagesToRemove.add(image);
  59. indexesToRemove.add(index);
  60. }
  61. // 从后往前删除,避免删除后索引错位
  62. for (int i = indexesToRemove.length - 1; i >= 0; i--) {
  63. int index = indexesToRemove[i];
  64. group.images.removeAt(index);
  65. group.selectedImages.removeAt(index);
  66. }
  67. // 如果当前组为空,则删除该组
  68. if (group.images.isEmpty) {
  69. photoGroups.remove(group);
  70. }
  71. // 更新选中的图片ID
  72. for (var image in imagesToRemove) {
  73. updateSelectedPhotosIds(image.id, false);
  74. }
  75. ToastUtil.show("Delete success");
  76. } else {
  77. ToastUtil.show("Delete failed");
  78. }
  79. } catch (e) {
  80. // 异常处理
  81. ToastUtil.show("Error occurred during deletion: $e");
  82. }
  83. }
  84. @override
  85. PhotosType getPhotosType() => PhotosType.similarPhotos;
  86. }