photo_selected_preview_controller.dart 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import 'package:clean/base/base_controller.dart';
  2. import 'package:clean/base/base_photo_controller.dart';
  3. import 'package:clean/data/bean/photos_type.dart';
  4. import 'package:clean/dialog/photo_delete_finish_dialog.dart';
  5. import 'package:clean/dialog/photo_deleting_dialog.dart';
  6. import 'package:clean/module/image_picker/image_picker_util.dart';
  7. import 'package:clean/module/people_photo/photo_group.dart';
  8. import 'package:clean/module/photo_preview/photo_preview_controller.dart';
  9. import 'package:clean/utils/toast_util.dart';
  10. import 'package:flutter/Material.dart';
  11. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  12. import 'package:get/get.dart';
  13. import 'package:wechat_assets_picker/wechat_assets_picker.dart';
  14. class PhotoSelectedPreviewController extends BasePhotoController {
  15. late PhotosType photosType;
  16. final RxBool isKeepAll = false.obs;
  17. final RxList<AssetEntity> selectedPhotos = <AssetEntity>[].obs;
  18. PhotoPreviewController photoPreviewController =
  19. Get.find<PhotoPreviewController>();
  20. @override
  21. void onInit() {
  22. _getArgs();
  23. super.onInit();
  24. }
  25. // 从参数中获取照片类型和选中的照片ID集合
  26. _getArgs() {
  27. final parameters = Get.arguments;
  28. photosType = parameters?['photosType'];
  29. selectedPhotosIds.assignAll(parameters?['selectedIds'] ?? []);
  30. }
  31. // 加载选中的照片预览
  32. @override
  33. void loadPhotos() {
  34. photoGroups.clear();
  35. for (var assetsEntity in photoPreviewController.listAssetEntity) {
  36. if (selectedPhotosIds.contains(assetsEntity.id)) {
  37. selectedPhotos.add(assetsEntity);
  38. }
  39. }
  40. if (selectedPhotos.isNotEmpty) {
  41. photoGroups.add(PhotoGroup(
  42. isSelected: true,
  43. images: selectedPhotos,
  44. ));
  45. }
  46. }
  47. void clickBack() {
  48. print('PhotoSelectedPreviewController clickBack');
  49. photoPreviewController.updateSelections(selectedPhotosIds);
  50. Get.back();
  51. }
  52. @override
  53. clickImage(List<AssetEntity> images, int imageIndex, PhotosType type) {
  54. print("PhotoSelectedPreviewController clickImage");
  55. }
  56. @override
  57. void clickDelete() async {
  58. photoDeletingDialog();
  59. if (selectedPhotosIds.isNotEmpty) {
  60. print("PhotoSelectedPreviewController clickDelete selectedPhotosIds $selectedPhotosIds");
  61. final assetsToDelete = photoGroups
  62. .expand((group) => group.images
  63. .where((asset) => selectedPhotosIds.contains(asset.id)))
  64. .toList();
  65. final List<String> result = await PhotoManager.editor.deleteWithIds(
  66. assetsToDelete.map((e) => e.id).toList(),
  67. );
  68. if (result.length == selectedPhotosIds.length) {
  69. isDeleteFinish = true;
  70. for (var group in photoGroups) {
  71. group.images
  72. .removeWhere((element) => selectedPhotosIds.contains(element.id));
  73. // 更新 group 中的 selectedImages 状态
  74. group.selectedImages.value = group.images.map((image) {
  75. return selectedPhotosIds.contains(image.id);
  76. }).toList();
  77. // 更新 group.isSelected
  78. group.isSelected.value = group.selectedImages.every((selected) => selected);
  79. }
  80. photoPreviewController.selectedPhotosIds.assignAll(selectedPhotosIds);
  81. photoPreviewController.cleanSelections();
  82. ImagePickerUtil.updatePhotoGroupDate(
  83. getPhotosType(), selectedPhotosIds);
  84. selectedPhotosIds.clear();
  85. ToastUtil.show("Delete success selectedPhotosIds ");
  86. Future.delayed(Duration(seconds: 2), () {
  87. SmartDialog.dismiss(tag: 'photoDeletingDialog');
  88. photoDeleteFinishDialog();
  89. });
  90. } else {
  91. ToastUtil.show("Delete failed");
  92. isDeleteFinish = false;
  93. }
  94. }else {
  95. // ToastUtil.show("Please select the photo to delete");
  96. isKeepAll.value = true;
  97. }
  98. }
  99. @override
  100. void onClose() {
  101. // TODO: implement onClose
  102. super.onClose();
  103. isKeepAll.value = false;
  104. }
  105. @override
  106. PhotosType getPhotosType() => photosType;
  107. }