|
|
@@ -1,4 +1,5 @@
|
|
|
import 'dart:ffi';
|
|
|
+import 'dart:io';
|
|
|
|
|
|
import 'package:classify_photo/classify_photo.dart';
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
@@ -17,11 +18,12 @@ class FileSizeCalculatorUtil {
|
|
|
return;
|
|
|
}
|
|
|
double totalSize = 0;
|
|
|
- totalSize = await ClassifyPhoto().calculatePhotosSize(assetIds.toList()) / 1024;
|
|
|
+ totalSize =
|
|
|
+ await ClassifyPhoto().calculatePhotosSize(assetIds.toList()) / 1024;
|
|
|
updateValue(totalSize);
|
|
|
}
|
|
|
|
|
|
- static Future<void> calculateTotalSize({
|
|
|
+ static Future<void> calculateTotalSizeByAndroid({
|
|
|
required Set<String> assetIds,
|
|
|
required Function(double) updateValue,
|
|
|
}) async {
|
|
|
@@ -62,6 +64,19 @@ class FileSizeCalculatorUtil {
|
|
|
updateValue(totalSize);
|
|
|
}
|
|
|
|
|
|
+ static Future<void> calculateTotalSize({
|
|
|
+ required Set<String> assetIds,
|
|
|
+ required Function(double) updateValue,
|
|
|
+ }) async {
|
|
|
+ if (Platform.isIOS) {
|
|
|
+ await calculateTotalSizeByIOS(
|
|
|
+ assetIds: assetIds, updateValue: updateValue);
|
|
|
+ } else {
|
|
|
+ await calculateTotalSizeByAndroid(
|
|
|
+ assetIds: assetIds, updateValue: updateValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// 获取文件大小
|
|
|
static Future<double> getFileSize(String assetId) async {
|
|
|
if (fileSizeCache.containsKey(assetId)) {
|
|
|
@@ -71,28 +86,42 @@ class FileSizeCalculatorUtil {
|
|
|
final entity = await AssetEntity.fromId(assetId);
|
|
|
if (entity == null) return 0;
|
|
|
|
|
|
- final file = await entity.file;
|
|
|
- if (file == null) return 0;
|
|
|
-
|
|
|
- if (!await file.exists()) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
- try {
|
|
|
+ if (Platform.isAndroid) {
|
|
|
+ final String? path = entity.relativePath;
|
|
|
+ if (path == null) return 0;
|
|
|
+ final file = File("/storage/emulated/0/$path${entity.title}");
|
|
|
+ print("file path: ${await file.path}");
|
|
|
+ if (!await file.exists()) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ print("file size: ${await file.length()}");
|
|
|
final double size = (await file.length()) / 1024;
|
|
|
fileSizeCache[assetId] = size;
|
|
|
+ return size;
|
|
|
+ } else {
|
|
|
+ final file = await entity.file;
|
|
|
+ if (file == null) return 0;
|
|
|
|
|
|
- try {
|
|
|
- await file.delete();
|
|
|
- } catch (e) {
|
|
|
- debugPrint("Delete file error: $e");
|
|
|
+ if (!await file.exists()) {
|
|
|
+ return 0;
|
|
|
}
|
|
|
+ try {
|
|
|
+ final double size = (await file.length()) / 1024;
|
|
|
+ fileSizeCache[assetId] = size;
|
|
|
+
|
|
|
+ try {
|
|
|
+ await file.delete();
|
|
|
+ } catch (e) {
|
|
|
+ debugPrint("Delete file error: $e");
|
|
|
+ }
|
|
|
|
|
|
- if (size <= 0) {
|
|
|
+ if (size <= 0) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return size;
|
|
|
+ } catch (e) {
|
|
|
return 0;
|
|
|
}
|
|
|
- return size;
|
|
|
- } catch (e) {
|
|
|
- return 0;
|
|
|
}
|
|
|
}
|
|
|
}
|