|
|
@@ -30,24 +30,38 @@ abstract class BasePhotoController extends BaseController {
|
|
|
}
|
|
|
|
|
|
// 获取选中的文件大小
|
|
|
- Future<void> getSelectedFilesSize() async {
|
|
|
+ Future<void> updateSelectedFilesSize() async {
|
|
|
+ // 如果没有选中的文件,直接返回
|
|
|
+ if (selectedFileCount.value == 0) {
|
|
|
+ selectedFilesSize.value = 0;
|
|
|
+ return;
|
|
|
+ }
|
|
|
double totalSize = 0;
|
|
|
for (var group in photoGroups) {
|
|
|
for (int i = 0; i < group.images.length; i++) {
|
|
|
if (group.selectedImages[i]) {
|
|
|
- final file = await group.images[i].file;
|
|
|
- if (file != null) {
|
|
|
- totalSize += file.lengthSync();
|
|
|
+ // 检查缓存
|
|
|
+ final assetId = group.images[i].id;
|
|
|
+ if (ImagePickerUtil.fileSizeCache.containsKey(assetId)) {
|
|
|
+ totalSize += ImagePickerUtil.fileSizeCache[assetId]!;
|
|
|
+ } else {
|
|
|
+ final file = await group.images[i].file;
|
|
|
+ if (file != null) {
|
|
|
+ final size = (await file.length()) / 1024; // 转换为KB
|
|
|
+ totalSize += size;
|
|
|
+ ImagePickerUtil.fileSizeCache[assetId] = size;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- selectedFilesSize.value = totalSize / 1024; // Convert to KB
|
|
|
+ selectedFilesSize.value = totalSize;
|
|
|
PhotoManager.clearFileCache();
|
|
|
}
|
|
|
|
|
|
// 切换图片选中状态
|
|
|
- void toggleImageSelection(List<AssetEntity> groupTitle, int imageIndex) {
|
|
|
+ Future<void> toggleImageSelection(
|
|
|
+ List<AssetEntity> groupTitle, int imageIndex) async {
|
|
|
print("BasePhotoController toggleImageSelection");
|
|
|
final group = getGroupByImages(groupTitle);
|
|
|
final image = group.images[imageIndex];
|
|
|
@@ -59,7 +73,31 @@ abstract class BasePhotoController extends BaseController {
|
|
|
group.isSelected.value = group.selectedImages.every((selected) => selected);
|
|
|
|
|
|
selectedFileCount.value = selectedPhotosIds.length;
|
|
|
- getSelectedFilesSize();
|
|
|
+
|
|
|
+ // 更新文件大小
|
|
|
+ if (selected) {
|
|
|
+ // 如果选中,增加文件大小
|
|
|
+ if (ImagePickerUtil.fileSizeCache.containsKey(image.id)) {
|
|
|
+ selectedFilesSize.value += ImagePickerUtil.fileSizeCache[image.id]!;
|
|
|
+ } else {
|
|
|
+ final file = await image.file;
|
|
|
+ if (file != null) {
|
|
|
+ selectedFilesSize.value += (await file.length()) / 1024; // 转换为KB
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果取消选中,减少文件大小
|
|
|
+ if (ImagePickerUtil.fileSizeCache.containsKey(image.id)) {
|
|
|
+ selectedFilesSize.value -= ImagePickerUtil.fileSizeCache[image.id]!;
|
|
|
+ } else {
|
|
|
+ final file = await image.file;
|
|
|
+ if (file != null) {
|
|
|
+ selectedFilesSize.value -= (await file.length()) / 1024; // 转换为KB
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ PhotoManager.clearFileCache();
|
|
|
}
|
|
|
|
|
|
void clickImage(List<AssetEntity> images, int imageIndex, PhotosType type) {
|
|
|
@@ -71,8 +109,6 @@ abstract class BasePhotoController extends BaseController {
|
|
|
|
|
|
// 切换图片组选中状态
|
|
|
void toggleGroupSelection(List<AssetEntity> imagesList) {
|
|
|
-
|
|
|
-
|
|
|
final group = getGroupByImages(imagesList);
|
|
|
final newValue = !group.isSelected.value;
|
|
|
group.toggleSelectAll(newValue);
|
|
|
@@ -81,7 +117,7 @@ abstract class BasePhotoController extends BaseController {
|
|
|
updateSelectedPhotosIds(image.id, newValue);
|
|
|
}
|
|
|
selectedFileCount.value = selectedPhotosIds.length;
|
|
|
- getSelectedFilesSize();
|
|
|
+ updateSelectedFilesSize();
|
|
|
}
|
|
|
|
|
|
PhotoGroup getGroupByImages(List<AssetEntity> images) {
|
|
|
@@ -113,7 +149,7 @@ abstract class BasePhotoController extends BaseController {
|
|
|
selectedFilesSize.value = 0;
|
|
|
return;
|
|
|
}
|
|
|
- await getSelectedFilesSize();
|
|
|
+ await updateSelectedFilesSize();
|
|
|
}
|
|
|
|
|
|
@override
|
|
|
@@ -150,7 +186,6 @@ abstract class BasePhotoController extends BaseController {
|
|
|
|
|
|
selectedPhotosIds.clear();
|
|
|
|
|
|
-
|
|
|
ToastUtil.show("Delete success");
|
|
|
Future.delayed(Duration(seconds: 2), () {
|
|
|
SmartDialog.dismiss(tag: 'photoDeletingDialog');
|
|
|
@@ -159,7 +194,6 @@ abstract class BasePhotoController extends BaseController {
|
|
|
} else {
|
|
|
SmartDialog.dismiss(tag: 'photoDeletingDialog');
|
|
|
ToastUtil.show("Delete failed");
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
@@ -203,4 +237,10 @@ abstract class BasePhotoController extends BaseController {
|
|
|
List<AssetEntity> getAllPhotos() {
|
|
|
return photoGroups.expand((group) => group.images).toList();
|
|
|
}
|
|
|
+
|
|
|
+ @override
|
|
|
+ void onClose() {
|
|
|
+ super.onClose();
|
|
|
+ PhotoManager.clearFileCache();
|
|
|
+ }
|
|
|
}
|