|
|
@@ -18,11 +18,41 @@ class FileSizeCalculatorUtil {
|
|
|
return;
|
|
|
}
|
|
|
double totalSize = 0;
|
|
|
- totalSize =
|
|
|
- await ClassifyPhoto().calculatePhotosSize(assetIds.toList()) / 1024;
|
|
|
+ const batchSize = 20;
|
|
|
+ final idList = assetIds.toList();
|
|
|
+
|
|
|
+ for (int i = 0; i < idList.length; i += batchSize) {
|
|
|
+ if (assetIds.isEmpty) {
|
|
|
+ updateValue(0);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ final batch = idList.skip(i).take(batchSize);
|
|
|
+
|
|
|
+ final sizes = await Future.wait(
|
|
|
+ batch.map((id) async {
|
|
|
+ try {
|
|
|
+ final size = await ClassifyPhoto().calculatePhotosSize([id]);
|
|
|
+ return size / 1024; // 转 KB
|
|
|
+ } catch (e) {
|
|
|
+ return 0.0;
|
|
|
+ }
|
|
|
+ }),
|
|
|
+ );
|
|
|
+
|
|
|
+ totalSize += sizes.fold(0.0, (sum, size) => sum + size);
|
|
|
+
|
|
|
+ if (assetIds.isEmpty) {
|
|
|
+ updateValue(0);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ await Future.delayed(Duration.zero); // 避免卡 UI
|
|
|
+ updateValue(totalSize);
|
|
|
+ }
|
|
|
+
|
|
|
updateValue(totalSize);
|
|
|
}
|
|
|
-
|
|
|
static Future<void> calculateTotalSizeByAndroid({
|
|
|
required Set<String> assetIds,
|
|
|
required Function(double) updateValue,
|