photo_selected_preview_controller.dart 4.4 KB

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