diff --git a/lib/common/widgets/image/cached_network_svg_image.dart b/lib/common/widgets/image/cached_network_svg_image.dart index a423aeda6..411c89af1 100644 --- a/lib/common/widgets/image/cached_network_svg_image.dart +++ b/lib/common/widgets/image/cached_network_svg_image.dart @@ -2,10 +2,10 @@ import 'dart:developer'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter_svg/flutter_svg.dart'; class CachedNetworkSVGImage extends StatefulWidget { @@ -28,7 +28,7 @@ class CachedNetworkSVGImage extends StatefulWidget { this._colorFilter, this._placeholderBuilder, BaseCacheManager? cacheManager, - }) : _cacheManager = cacheManager ?? DefaultCacheManager(), + }) : _cacheManager = cacheManager ?? DefaultCacheManager.instance!, super(key: key ?? ValueKey(_cacheKey ?? _url)); final String _url; diff --git a/lib/common/widgets/image/network_img_layer.dart b/lib/common/widgets/image/network_img_layer.dart index c6f327191..e42296744 100644 --- a/lib/common/widgets/image/network_img_layer.dart +++ b/lib/common/widgets/image/network_img_layer.dart @@ -4,7 +4,7 @@ import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/material.dart'; class NetworkImgLayer extends StatelessWidget { diff --git a/lib/common/widgets/image_viewer/gallery_viewer.dart b/lib/common/widgets/image_viewer/gallery_viewer.dart index 9afa5424d..30ba4be0a 100644 --- a/lib/common/widgets/image_viewer/gallery_viewer.dart +++ b/lib/common/widgets/image_viewer/gallery_viewer.dart @@ -36,7 +36,7 @@ import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart' hide Image, PageView; diff --git a/lib/main.dart b/lib/main.dart index c686975d7..7cae3cb79 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -100,7 +100,11 @@ void main() async { exit(0); } ScaledWidgetsFlutterBinding.instance.scaleFactor = Pref.uiScale; - await Future.wait([_initDownPath(), _initTmpPath()]); + await Future.wait([ + _initDownPath(), + _initTmpPath(), + CacheManager.ensureInitialized(), + ]); Get ..lazyPut(AccountService.new) ..lazyPut(DownloadService.new); diff --git a/lib/pages/article/view.dart b/lib/pages/article/view.dart index 9d406a77e..3283ddc21 100644 --- a/lib/pages/article/view.dart +++ b/lib/pages/article/view.dart @@ -24,7 +24,7 @@ import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/share_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; diff --git a/lib/pages/article/widgets/article_ops.dart b/lib/pages/article/widgets/article_ops.dart index fd1d3e19e..943520e78 100644 --- a/lib/pages/article/widgets/article_ops.dart +++ b/lib/pages/article/widgets/article_ops.dart @@ -6,7 +6,7 @@ import 'package:PiliPlus/pages/dynamics/widgets/vote.dart'; import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/pages/article/widgets/html_render.dart b/lib/pages/article/widgets/html_render.dart index caf10a468..68b27fa68 100644 --- a/lib/pages/article/widgets/html_render.dart +++ b/lib/pages/article/widgets/html_render.dart @@ -4,7 +4,7 @@ import 'package:PiliPlus/models/common/image_preview_type.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; diff --git a/lib/pages/article/widgets/opus_content.dart b/lib/pages/article/widgets/opus_content.dart index b0d260973..4239b4ca0 100644 --- a/lib/pages/article/widgets/opus_content.dart +++ b/lib/pages/article/widgets/opus_content.dart @@ -18,7 +18,7 @@ import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:get/get_core/src/get_main.dart'; diff --git a/lib/pages/common/publish/common_rich_text_pub_page.dart b/lib/pages/common/publish/common_rich_text_pub_page.dart index 9c76d31cd..8a21a1beb 100644 --- a/lib/pages/common/publish/common_rich_text_pub_page.dart +++ b/lib/pages/common/publish/common_rich_text_pub_page.dart @@ -22,13 +22,12 @@ import 'package:PiliPlus/utils/feed_back.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:dio/dio.dart' show CancelToken; import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:image_cropper/image_cropper.dart'; @@ -191,11 +190,10 @@ abstract class CommonRichTextPubPageState path = e.path; case OpusPicModel e: SmartDialog.showLoading(); - final file = (await DefaultCacheManager().getSingleFile( + path = (await DefaultCacheManager.instance!.getSingleFile( e.url.http2https, - )); + )).path; await SmartDialog.dismiss(); - path = file.path; } if (!mounted || path.isEmpty) return; late final colorScheme = ColorScheme.of(context); diff --git a/lib/pages/dynamics/widgets/author_panel.dart b/lib/pages/dynamics/widgets/author_panel.dart index c4d71c7d3..99ed4664d 100644 --- a/lib/pages/dynamics/widgets/author_panel.dart +++ b/lib/pages/dynamics/widgets/author_panel.dart @@ -25,7 +25,7 @@ import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/request_utils.dart'; import 'package:PiliPlus/utils/share_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; diff --git a/lib/pages/dynamics/widgets/module_panel.dart b/lib/pages/dynamics/widgets/module_panel.dart index 507be62f7..a9d3c1a0d 100644 --- a/lib/pages/dynamics/widgets/module_panel.dart +++ b/lib/pages/dynamics/widgets/module_panel.dart @@ -13,7 +13,7 @@ import 'package:PiliPlus/pages/dynamics/widgets/video_panel.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; diff --git a/lib/pages/live_room/superchat/superchat_card.dart b/lib/pages/live_room/superchat/superchat_card.dart index 5195c21a7..b2e89d9ba 100644 --- a/lib/pages/live_room/superchat/superchat_card.dart +++ b/lib/pages/live_room/superchat/superchat_card.dart @@ -9,7 +9,7 @@ import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index f873a25c8..b1d6eeac3 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -49,7 +49,7 @@ import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:canvas_danmaku/danmaku_screen.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart' hide PageView; diff --git a/lib/pages/member/view.dart b/lib/pages/member/view.dart index 629bcbe6e..ce7dc0da2 100644 --- a/lib/pages/member/view.dart +++ b/lib/pages/member/view.dart @@ -40,9 +40,9 @@ import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; @@ -703,7 +703,7 @@ class _MemberPageState extends State { Future _createShortcutAndroid() async { try { SmartDialog.showLoading(); - final file = (await DefaultCacheManager().getSingleFile( + final file = (await DefaultCacheManager.instance!.getSingleFile( '${_userController.userAvatar!}@200w_200h.webp'.http2https, )); SmartDialog.dismiss(); diff --git a/lib/pages/member/widget/user_info_card.dart b/lib/pages/member/widget/user_info_card.dart index 8804f5b20..4e064ce27 100644 --- a/lib/pages/member/widget/user_info_card.dart +++ b/lib/pages/member/widget/user_info_card.dart @@ -35,7 +35,7 @@ import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; diff --git a/lib/pages/search/widgets/hot_keyword.dart b/lib/pages/search/widgets/hot_keyword.dart index eb8856d46..d0e53adeb 100644 --- a/lib/pages/search/widgets/hot_keyword.dart +++ b/lib/pages/search/widgets/hot_keyword.dart @@ -2,7 +2,7 @@ import 'package:PiliPlus/common/assets.dart'; import 'package:PiliPlus/models_new/search/search_trending/list.dart'; import 'package:PiliPlus/utils/extension/string_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart' show diff --git a/lib/pages/search_trending/view.dart b/lib/pages/search_trending/view.dart index 5170490e5..0d33f60fe 100644 --- a/lib/pages/search_trending/view.dart +++ b/lib/pages/search_trending/view.dart @@ -14,7 +14,7 @@ import 'package:PiliPlus/utils/extension/get_ext.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/size_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart' hide ListTile; import 'package:flutter/services.dart' show SystemUiOverlayStyle; diff --git a/lib/pages/video/reply/widgets/reply_item_grpc.dart b/lib/pages/video/reply/widgets/reply_item_grpc.dart index ba5bd1aa2..a719d8643 100644 --- a/lib/pages/video/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/reply/widgets/reply_item_grpc.dart @@ -46,7 +46,7 @@ import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/url_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:fixnum/fixnum.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; diff --git a/lib/pages/whisper_detail/widget/chat_item.dart b/lib/pages/whisper_detail/widget/chat_item.dart index bff9f19e5..d0e4af596 100644 --- a/lib/pages/whisper_detail/widget/chat_item.dart +++ b/lib/pages/whisper_detail/widget/chat_item.dart @@ -21,7 +21,7 @@ import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; -import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; diff --git a/lib/plugin/pl_player/view/view.dart b/lib/plugin/pl_player/view/view.dart index c7b9c5354..8656542ac 100644 --- a/lib/plugin/pl_player/view/view.dart +++ b/lib/plugin/pl_player/view/view.dart @@ -65,6 +65,7 @@ import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/utils.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:canvas_danmaku/canvas_danmaku.dart'; import 'package:collection/collection.dart'; import 'package:easy_debounce/easy_throttle.dart'; @@ -75,7 +76,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart' show RenderProxyBox, SemanticsConfiguration; import 'package:flutter/services.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_volume_controller/flutter_volume_controller.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; diff --git a/lib/plugin/pl_player/view/widgets.dart b/lib/plugin/pl_player/view/widgets.dart index 83e47b913..bd3c1a80e 100644 --- a/lib/plugin/pl_player/view/widgets.dart +++ b/lib/plugin/pl_player/view/widgets.dart @@ -153,7 +153,7 @@ class VideoShotImage extends StatefulWidget { } Future _getImg(String url) async { - final cacheManager = DefaultCacheManager(); + final cacheManager = DefaultCacheManager.instance!; final cacheKey = Utils.getFileName(url, fileExt: false); try { final fileInfo = await cacheManager.getSingleFile( diff --git a/lib/services/download/download_service.dart b/lib/services/download/download_service.dart index 1d469da0d..21c31e6f0 100644 --- a/lib/services/download/download_service.dart +++ b/lib/services/download/download_service.dart @@ -20,8 +20,8 @@ import 'package:PiliPlus/utils/extension/file_ext.dart'; import 'package:PiliPlus/utils/extension/string_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/path_utils.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/foundation.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:path/path.dart' as path; @@ -350,7 +350,7 @@ class DownloadService extends GetxService { if (File(filePath).existsSync()) { return true; } - final file = (await DefaultCacheManager().getFileFromCache( + final file = (await DefaultCacheManager.instance!.getFileFromCache( entry.cover, ))?.file; if (file != null) { diff --git a/lib/utils/cache_manager.dart b/lib/utils/cache_manager.dart index 05e5c90e7..7d0befb29 100644 --- a/lib/utils/cache_manager.dart +++ b/lib/utils/cache_manager.dart @@ -1,27 +1,29 @@ import 'dart:io' show Directory, File; +import 'package:PiliPlus/utils/extension/file_ext.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; +import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart'; abstract final class CacheManager { + static late final DefaultCacheManager manager; + + static Future ensureInitialized() => + DefaultCacheManager.init().then((i) => manager = i); + // 获取缓存目录 @pragma('vm:notify-debugger-on-exception') - static Future loadApplicationCache([ - final num maxSize = double.infinity, - ]) async { + static Future loadApplicationCache() async { try { final Directory tempDirectory = await getTemporaryDirectory(); if (PlatformUtils.isDesktop) { - final dir = Directory('${tempDirectory.path}/libCachedImageData'); - if (dir.existsSync()) { - return await getTotalSizeOfFilesInDir(dir, maxSize); - } - return 0; + return manager.getTotalLength(); } if (tempDirectory.existsSync()) { - return await getTotalSizeOfFilesInDir(tempDirectory, maxSize); + return await getTotalSizeOfFilesInDir(tempDirectory); } } catch (_) {} return 0; @@ -29,16 +31,21 @@ abstract final class CacheManager { // 循环计算文件的大小 @pragma('vm:notify-debugger-on-exception') - static Future getTotalSizeOfFilesInDir( - final Directory file, [ - final num maxSize = double.infinity, - ]) async { - final children = file.list(recursive: true); + static Future getTotalSizeOfFilesInDir(final Directory file) async { int total = 0; - await for (final child in children) { + await for (final child in file.list(recursive: false)) { if (child is File) { total += await child.length(); - if (total >= maxSize) break; + } else if (child is Directory) { + if (path.equals(child.path, manager.cacheDir)) { + total += manager.getTotalLength(); + } else { + await for (final i in child.list(recursive: true)) { + if (i is File) { + total += await i.length(); + } + } + } } } return total; @@ -57,16 +64,13 @@ abstract final class CacheManager { } // 清除 Library/Caches 目录及文件缓存 + @pragma('vm:notify-debugger-on-exception') static Future clearLibraryCache() async { try { - final Directory tempDirectory = await getTemporaryDirectory(); - if (PlatformUtils.isDesktop) { - final dir = Directory('${tempDirectory.path}/libCachedImageData'); - if (dir.existsSync()) { - await dir.delete(recursive: true); - } - return; - } + await manager.emptyCache(); + if (PlatformUtils.isDesktop) return; + + final tempDirectory = await getTemporaryDirectory(); if (tempDirectory.existsSync()) { final children = tempDirectory.list(recursive: false); await for (final file in children) { @@ -77,12 +81,16 @@ abstract final class CacheManager { } static Future autoClearCache() async { + // TODO: remove + Directory( + '${(await getTemporaryDirectory()).path}/libCachedImageData', + ).tryDel(recursive: true); if (Pref.autoClearCache) { await clearLibraryCache(); } else { final maxCacheSize = Pref.maxCacheSize; if (maxCacheSize != 0) { - final currCache = await loadApplicationCache(maxCacheSize); + final currCache = await loadApplicationCache(); if (currCache >= maxCacheSize) { await clearLibraryCache(); } diff --git a/lib/utils/image_utils.dart b/lib/utils/image_utils.dart index 06d0ca7c1..ea05d9585 100644 --- a/lib/utils/image_utils.dart +++ b/lib/utils/image_utils.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:io' show File, Platform; import 'dart:math' as math; import 'dart:typed_data' show Uint8List; @@ -14,10 +15,10 @@ import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/share_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; +import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:dio/dio.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:intl/intl.dart' show DateFormat; import 'package:live_photo_maker/live_photo_maker.dart'; @@ -36,19 +37,16 @@ abstract final class ImageUtils { static Future onShareImg(String url) async { try { SmartDialog.showLoading(); - final path = '$tmpDirPath/${Utils.getFileName(url)}'; - final res = await Request().downloadFile(url.http2https, path); + final res = await DefaultCacheManager.instance!.getSingleFile( + url.http2https, + ); SmartDialog.dismiss(); - if (res.statusCode == 200) { - await SharePlus.instance - .share( - ShareParams( - files: [XFile(path)], - sharePositionOrigin: await ShareUtils.sharePositionOrigin, - ), - ) - .whenComplete(File(path).tryDel); - } + await SharePlus.instance.share( + ShareParams( + files: [XFile(res.path)], + sharePositionOrigin: await ShareUtils.sharePositionOrigin, + ), + ); } catch (e) { SmartDialog.showToast(e.toString()); } @@ -82,12 +80,12 @@ abstract final class ImageUtils { } } - static Future checkPermissionDependOnSdkInt() { + static FutureOr checkPermissionDependOnSdkInt() { if (Platform.isAndroid) { if (DeviceUtils.sdkInt < 29) { return requestPer(); } else { - return Future.syncValue(true); + return true; } } return requestPer(); @@ -105,8 +103,6 @@ abstract final class ImageUtils { } if (!silentDownImg) SmartDialog.showLoading(msg: '正在下载'); - late String imageName = "cover_${Utils.getFileName(url)}"; - late String imagePath = '$tmpDirPath/$imageName'; String videoName = "video_${Utils.getFileName(liveUrl)}"; String videoPath = '$tmpDirPath/$videoName'; @@ -114,22 +110,17 @@ abstract final class ImageUtils { if (res.statusCode != 200) throw '${res.statusCode}'; if (Platform.isIOS) { - final res1 = await Request().downloadFile(url.http2https, imagePath); - if (res1.statusCode != 200) throw '${res1.statusCode}'; + final imageFile = await DefaultCacheManager.instance!.getSingleFile( + url.http2https, + ); if (!silentDownImg) SmartDialog.showLoading(msg: '正在保存'); - bool success = - await LivePhotoMaker.create( - coverImage: imagePath, - imagePath: null, - voicePath: videoPath, - width: width, - height: height, - ).whenComplete( - () { - File(videoPath).tryDel(); - File(imagePath).tryDel(); - }, - ); + bool success = await LivePhotoMaker.create( + coverImage: imageFile.path, + imagePath: null, + voicePath: videoPath, + width: width, + height: height, + ).whenComplete(File(videoPath).tryDel); if (success) { SmartDialog.showToast(' 已保存 '); } else { @@ -154,10 +145,7 @@ abstract final class ImageUtils { } } - static Future downloadImg( - List imgList, [ - CacheManager? manager, - ]) async { + static Future downloadImg(List imgList) async { if (PlatformUtils.isMobile && !await checkPermissionDependOnSdkInt()) { return false; } @@ -174,31 +162,10 @@ abstract final class ImageUtils { final futures = imgList.map((url) async { final name = Utils.getFileName(url); - final file = (await (manager ?? DefaultCacheManager()).getFileFromCache( + final file = await DefaultCacheManager.instance!.getSingleFile( url.http2https, - ))?.file; - - if (file == null) { - final String filePath = '$tmpDirPath/$name'; - final response = await Request().downloadFile( - url.http2https, - filePath, - cancelToken: cancelToken, - ); - return ( - filePath: filePath, - name: name, - statusCode: response.statusCode, - del: true, - ); - } else { - return ( - filePath: file.path, - name: name, - statusCode: 200, - del: false, - ); - } + ); + return (filePath: file.path, name: name, statusCode: 200); }); final result = await Future.wait(futures, eagerError: true); bool success = true; @@ -206,7 +173,6 @@ abstract final class ImageUtils { final delList = []; final saveList = []; for (final i in result) { - if (i.del) delList.add(i.filePath); if (i.statusCode == 200) { saveList.add( SaveFileData( @@ -226,11 +192,7 @@ abstract final class ImageUtils { } else { for (final res in result) { if (res.statusCode == 200) { - await saveFileImg( - filePath: res.filePath, - fileName: res.name, - del: res.del, - ); + await saveFileImg(filePath: res.filePath, fileName: res.name); } else { success = false; } @@ -336,7 +298,6 @@ abstract final class ImageUtils { required String fileName, FileType type = FileType.image, bool needToast = false, - bool del = true, }) async { final file = File(filePath); if (!file.existsSync()) { @@ -351,7 +312,6 @@ abstract final class ImageUtils { albumPath: _albumPath, skipIfExists: false, ); - if (del) file.tryDel(); } else { final savePath = await FilePicker.saveFile( type: type, @@ -363,7 +323,6 @@ abstract final class ImageUtils { return; } await file.copy(savePath); - if (del) file.tryDel(); res = SaveResult(true, null); } if (needToast) { diff --git a/pubspec.lock b/pubspec.lock index b65f4747f..21ce38999 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -92,10 +92,11 @@ packages: audio_service: dependency: "direct main" description: - name: audio_service - sha256: cb122c7c2639d2a992421ef96b67948ad88c5221da3365ccef1031393a76e044 - url: "https://pub.dev" - source: hosted + path: audio_service + ref: HEAD + resolved-ref: be57f49b20659528cb35448615a007d5bc67507e + url: "https://github.com/My-Responsitories/audio_service" + source: git version: "0.18.18" audio_service_platform_interface: dependency: transitive @@ -201,30 +202,33 @@ packages: url: "https://pub.dev" source: hosted version: "8.12.6" - cached_network_image: + cached_network_image_ce: dependency: "direct main" description: - name: cached_network_image - sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" - url: "https://pub.dev" - source: hosted - version: "3.4.1" - cached_network_image_platform_interface: + path: cached_network_image + ref: HEAD + resolved-ref: "26bc080bc4464483ddde4e850f8c53dc98b07ac0" + url: "https://github.com/My-Responsitories/flutter_cached_network_image_ce" + source: git + version: "4.6.4" + cached_network_image_platform_interface_ce: dependency: transitive description: - name: cached_network_image_platform_interface - sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" - url: "https://pub.dev" - source: hosted - version: "4.1.1" - cached_network_image_web: + path: cached_network_image_platform_interface + ref: HEAD + resolved-ref: "26bc080bc4464483ddde4e850f8c53dc98b07ac0" + url: "https://github.com/My-Responsitories/flutter_cached_network_image_ce" + source: git + version: "5.2.0" + cached_network_image_web_ce: dependency: transitive description: - name: cached_network_image_web - sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" - url: "https://pub.dev" - source: hosted - version: "1.3.1" + path: cached_network_image_web + ref: HEAD + resolved-ref: "26bc080bc4464483ddde4e850f8c53dc98b07ac0" + url: "https://github.com/My-Responsitories/flutter_cached_network_image_ce" + source: git + version: "2.1.1" canvas_danmaku: dependency: "direct main" description: @@ -596,14 +600,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_cache_manager: - dependency: "direct main" - description: - name: flutter_cache_manager - sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" - url: "https://pub.dev" - source: hosted - version: "3.4.1" flutter_displaymode: dependency: "direct main" description: @@ -1671,46 +1667,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.2" - sqflite: - dependency: transitive - description: - name: sqflite - sha256: "564cfed0746fe53140c23b70b308e045c3b31f17778f2f326ccb7d804ea0250a" - url: "https://pub.dev" - source: hosted - version: "2.4.2+1" - sqflite_android: - dependency: transitive - description: - name: sqflite_android - sha256: "881e28efdcc9950fd8e9bb42713dcf1103e62a2e7168f23c9338d82db13dec40" - url: "https://pub.dev" - source: hosted - version: "2.4.2+3" - sqflite_common: - dependency: transitive - description: - name: sqflite_common - sha256: "1581ffbf7a0e333b380d6a30737d78516b826cb35beb7fb0bf8a3ea0c678b465" - url: "https://pub.dev" - source: hosted - version: "2.5.8" - sqflite_darwin: - dependency: transitive - description: - name: sqflite_darwin - sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - sqflite_platform_interface: - dependency: transitive - description: - name: sqflite_platform_interface - sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" - url: "https://pub.dev" - source: hosted - version: "2.4.0" stack_trace: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 6b1aa2ce3..e5ffac5d3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,11 +37,17 @@ dependencies: app_links: ^7.1.1 archive: ^4.0.0 - audio_service: ^0.18.15 + audio_service: + git: + url: https://github.com/My-Responsitories/audio_service + path: audio_service audio_session: ^0.2.2 battery_plus: ^7.0.0 brotli: ^0.6.0 - cached_network_image: ^3.4.1 + cached_network_image_ce: + git: + url: https://github.com/My-Responsitories/flutter_cached_network_image_ce + path: cached_network_image canvas_danmaku: git: url: https://github.com/bggRGjQaUbCoE/canvas_danmaku.git @@ -83,7 +89,6 @@ dependencies: fixnum: ^1.1.1 fl_chart: ^1.0.0 flex_seed_scheme: ^4.0.1 - flutter_cache_manager: ^3.4.1 flutter_displaymode: ^0.7.0 flutter_html: ^3.0.0-beta.2 flutter_inappwebview: ^6.1.5