| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- import 'dart:io';
- import 'package:clean/base/base_controller.dart';
- import 'package:clean/base/base_photo_controller.dart';
- import 'package:clean/data/bean/photos_type.dart';
- import 'package:clean/data/repositories/user_repository.dart';
- import 'package:clean/dialog/photo_delete_finish_dialog.dart';
- import 'package:clean/dialog/photo_deleting_dialog.dart';
- import 'package:clean/handler/event_handler.dart';
- import 'package:clean/module/image_picker/image_picker_util.dart';
- import 'package:clean/module/people_photo/photo_group.dart';
- import 'package:clean/module/photo_preview/photo_preview_view.dart';
- import 'package:clean/module/store/store_view.dart';
- import 'package:clean/utils/toast_util.dart';
- import 'package:flutter/Material.dart';
- import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
- import 'package:get/get.dart';
- import 'package:wechat_assets_picker/wechat_assets_picker.dart';
- import '../../data/consts/event_report_id.dart';
- import '../../utils/file_size_calculator_util.dart';
- import '../photo_preview/phtoto_selected_preview_view.dart';
- class SimilarPhotoController extends BasePhotoController {
- @override
- void loadPhotos() {
- photoGroups.clear();
- photoGroups.addAll(
- ImagePickerUtil.similarPhotos.where((group) => group.isNotEmpty).map(
- (group) {
- return PhotoGroup(
- isSelected: true,
- images: group,
- );
- },
- ),
- );
- for (var group in photoGroups) {
- for (int i = 0; i < group.images.length; i++) {
- group.selectedImages[i] = i == 0 ? false : true;
- updateSelectedPhotosIds(group.images[i].id, i != 0);
- }
- }
- ImagePickerUtil.selectedSimilarPhotosIds.assignAll(selectedPhotosIds);
- }
- // 点击删除单组选中的图片
- void clickSingleGroupDelete(List<AssetEntity> images) async {
- EventHandler.report(EventId.event_03007);
- if (userRepository.isVip()) {
- // 获取指定组
- final group = getGroupByImages(images);
- // 获取该组中所有选中的图片
- final selectedImages = group.images
- .where((image) => group.selectedImages[group.images.indexOf(image)])
- .toList();
- if (selectedImages.isEmpty) {
- ToastUtil.show('Please select the photo to delete');
- return;
- }
- photoDeletingDialog();
- try {
- // 执行删除操作
- final List<String> result = await PhotoManager.editor.deleteWithIds(
- selectedImages.map((e) => e.id).toList(),
- );
- // 检查删除成功的图片数量
- if (result.length == selectedImages.length) {
- int singleSelectSize = 0;
- FileSizeCalculatorUtil.calculateTotalSize(
- assetIds: result.toSet(),
- updateValue: (double totalSize) {
- singleSelectSize = (totalSize * 1024).toInt();
- });
- ImagePickerUtil.similarPhotosSize.value =
- (ImagePickerUtil.similarPhotosSize.value -
- singleSelectSize );
- // 先删除该组的图片,再更新selectedImages和selectedPhotosIds
- List<AssetEntity> imagesToRemove = [];
- List<int> indexesToRemove = [];
- for (var image in selectedImages) {
- // 找到图片在该组中的索引
- int index = group.images.indexOf(image);
- imagesToRemove.add(image);
- indexesToRemove.add(index);
- }
- // 从后往前删除,避免删除后索引错位
- for (int i = indexesToRemove.length - 1; i >= 0; i--) {
- int index = indexesToRemove[i];
- group.images.removeAt(index);
- group.selectedImages.removeAt(index);
- }
- // 如果当前组为空,则删除该组
- if (group.images.isEmpty) {
- photoGroups.remove(group);
- }
- // 更新选中的图片ID
- for (var image in imagesToRemove) {
- updateSelectedPhotosIds(image.id, false);
- }
- ImagePickerUtil.updatePhotoData(result.toSet());
- selectedFileCount.value = selectedPhotosIds.length;
- updateSelectedFilesSize();
- Future.delayed(Duration(seconds: 2), () {
- SmartDialog.dismiss(tag: 'photoDeletingDialog');
- photoDeleteFinishDialog();
- });
- ToastUtil.show("Delete success");
- } else {
- SmartDialog.dismiss(tag: 'photoDeletingDialog');
- ToastUtil.show("Delete failed");
- }
- } catch (e) {
- // 异常处理
- SmartDialog.dismiss(tag: 'photoDeletingDialog');
- ToastUtil.show("Error occurred during deletion: $e");
- }
- } else {
- StorePage.start();
- }
- }
- void clickJumpSelect() {
- if (selectedPhotosIds.isEmpty) {
- ToastUtil.show('Please select the picture');
- return;
- }
- debugPrint('SimilarPhotoController clickJumpSelected');
- EventHandler.report(EventId.event_04005);
- PhotoSelectedPreviewPage.start(PhotosType.similarPhotos, selectedPhotosIds);
- }
- @override
- void onReady() {
- // TODO: implement onReady
- super.onReady();
- EventHandler.report(EventId.event_03006);
- }
- @override
- PhotosType getPhotosType() => PhotosType.similarPhotos;
- }
|