diff --git a/lib/common/widgets/image/cached_network_svg_image.dart b/lib/common/widgets/image/cached_network_svg_image.dart index 62a433c60..6fa93fb33 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' show log; +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 6930603f4..661582e62 100644 --- a/lib/common/widgets/image/network_img_layer.dart +++ b/lib/common/widgets/image/network_img_layer.dart @@ -2,7 +2,7 @@ import 'package:PiliPlus/common/assets.dart'; import 'package:PiliPlus/common/style.dart'; import 'package:PiliPlus/models/common/image_type.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'; class NetworkImgLayer extends StatelessWidget { @@ -79,7 +79,7 @@ class NetworkImgLayer extends StatelessWidget { placeholder: (_, _) => getPlaceHolder?.call() ?? _placeholder(context, isEmote: isEmote, isAvatar: isAvatar), - errorWidget: (_, _, _) => + errorBuilder: (_, _, _) => _placeholder(context, isEmote: isEmote, isAvatar: isAvatar), ); } diff --git a/lib/common/widgets/image_viewer/gallery_viewer.dart b/lib/common/widgets/image_viewer/gallery_viewer.dart index 4f2522d41..0c493e3fd 100644 --- a/lib/common/widgets/image_viewer/gallery_viewer.dart +++ b/lib/common/widgets/image_viewer/gallery_viewer.dart @@ -35,7 +35,7 @@ import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/theme_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: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 5bf4a63b6..86d4c9d2f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -94,7 +94,11 @@ void main() async { if (kDebugMode) debugPrint('GStorage init error: $e'); exit(0); } - 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 87b24ea2a..bc592ce0f 100644 --- a/lib/pages/article/view.dart +++ b/lib/pages/article/view.dart @@ -23,7 +23,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 8c456c1b9..33520cc6b 100644 --- a/lib/pages/article/widgets/article_ops.dart +++ b/lib/pages/article/widgets/article_ops.dart @@ -5,7 +5,7 @@ import 'package:PiliPlus/models_new/article/article_view/ops.dart'; import 'package:PiliPlus/pages/dynamics/widgets/vote.dart'; import 'package:PiliPlus/utils/app_scheme.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 f71ea0f0f..626aa14dc 100644 --- a/lib/pages/article/widgets/html_render.dart +++ b/lib/pages/article/widgets/html_render.dart @@ -3,7 +3,7 @@ import 'package:PiliPlus/common/widgets/image_viewer/hero.dart'; import 'package:PiliPlus/models/common/image_preview_type.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 fac69a2a5..c28fc6501 100644 --- a/lib/pages/article/widgets/opus_content.dart +++ b/lib/pages/article/widgets/opus_content.dart @@ -16,7 +16,7 @@ import 'package:PiliPlus/utils/app_scheme.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 81a95c24d..63b7cf33a 100644 --- a/lib/pages/common/publish/common_rich_text_pub_page.dart +++ b/lib/pages/common/publish/common_rich_text_pub_page.dart @@ -19,13 +19,12 @@ import 'package:PiliPlus/utils/extension/theme_ext.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'; @@ -189,11 +188,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 c21489800..a21c02154 100644 --- a/lib/pages/dynamics/widgets/author_panel.dart +++ b/lib/pages/dynamics/widgets/author_panel.dart @@ -23,7 +23,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 eacc26156..542c6a712 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/app_scheme.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 95ae90d0a..bb7180bb8 100644 --- a/lib/pages/live_room/superchat/superchat_card.dart +++ b/lib/pages/live_room/superchat/superchat_card.dart @@ -8,7 +8,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 ee5b1f9a4..101d7f321 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -43,7 +43,7 @@ import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/theme_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:canvas_danmaku/canvas_danmaku.dart'; import 'package:flutter/foundation.dart' show kDebugMode, clampDouble; import 'package:flutter/material.dart' hide PageView; diff --git a/lib/pages/member/view.dart b/lib/pages/member/view.dart index 2d1ebf1ab..b50d488c6 100644 --- a/lib/pages/member/view.dart +++ b/lib/pages/member/view.dart @@ -41,9 +41,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'; @@ -701,7 +701,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 e01bd8baf..ffcf43362 100644 --- a/lib/pages/member/widget/user_info_card.dart +++ b/lib/pages/member/widget/user_info_card.dart @@ -34,7 +34,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 aa14b1076..16d882bff 100644 --- a/lib/pages/search_trending/view.dart +++ b/lib/pages/search_trending/view.dart @@ -13,7 +13,7 @@ import 'package:PiliPlus/utils/extension/context_ext.dart'; import 'package:PiliPlus/utils/extension/get_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' show clampDouble; 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 8a1340601..51b93c322 100644 --- a/lib/pages/video/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/reply/widgets/reply_item_grpc.dart @@ -35,7 +35,7 @@ import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/platform_utils.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 e67c467ea..d5757ccf9 100644 --- a/lib/pages/whisper_detail/widget/chat_item.dart +++ b/lib/pages/whisper_detail/widget/chat_item.dart @@ -18,7 +18,7 @@ import 'package:PiliPlus/utils/duration_utils.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 bd612c5b2..4a6a9de87 100644 --- a/lib/plugin/pl_player/view/view.dart +++ b/lib/plugin/pl_player/view/view.dart @@ -51,12 +51,12 @@ 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:easy_debounce/easy_throttle.dart'; import 'package:flutter/foundation.dart' show clampDouble, kDebugMode; import 'package:flutter/gestures.dart'; 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: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 fb2f46d0b..0701178d4 100644 --- a/lib/plugin/pl_player/view/widgets.dart +++ b/lib/plugin/pl_player/view/widgets.dart @@ -102,7 +102,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 a70c4b6a8..70a392281 100644 --- a/lib/services/download/download_service.dart +++ b/lib/services/download/download_service.dart @@ -19,9 +19,9 @@ 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' - show kDebugMode, debugPrint, VoidCallback; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; + show kDebugMode, debugPrint, VoidCallbackebugPrint, VoidCallback; 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 285676c69..008eb7251 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,32 +31,34 @@ 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; } // 清除 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) { @@ -65,9 +69,13 @@ abstract final class CacheManager { } static Future autoClearCache() async { + // TODO: remove + Directory( + '${(await getTemporaryDirectory()).path}/libCachedImageData', + ).tryDel(recursive: true); 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 ddda860a7..8c8e6fca3 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; @@ -13,10 +14,10 @@ import 'package:PiliPlus/utils/permission_handler.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/share_utils.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'; @@ -34,19 +35,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()); } @@ -80,12 +78,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(); @@ -103,8 +101,6 @@ abstract final class ImageUtils { } 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'; @@ -112,22 +108,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, + ); 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 { @@ -152,10 +143,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; } @@ -169,32 +157,10 @@ abstract final class ImageUtils { try { 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; @@ -202,7 +168,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( @@ -222,11 +187,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; } @@ -340,7 +301,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()) { @@ -355,7 +315,6 @@ abstract final class ImageUtils { albumPath: _albumPath, skipIfExists: false, ); - if (del) file.tryDel(); } else { final savePath = await FilePicker.saveFile( type: type, @@ -367,7 +326,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 4b36cb549..130736288 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: dev + resolved-ref: "2b1021f656579c871d2baa9100254b3e12b9428a" + url: "https://github.com/bggRGjQaUbCoE/audio_service.git" + source: git version: "0.18.18" audio_service_platform_interface: dependency: transitive @@ -201,31 +202,33 @@ packages: url: "https://pub.dev" source: hosted version: "8.12.6" - cached_network_image: + cached_network_image_ce: dependency: "direct main" description: path: cached_network_image ref: dev - resolved-ref: "3582e14c5d9ca92b0f0b3737e5e8a80a8fb77464" - url: "https://github.com/bggRGjQaUbCoE/flutter_cached_network_image.git" + resolved-ref: "4096db7898936295dbf8108f9eacdb6928c41dec" + url: "https://github.com/bggRGjQaUbCoE/flutter_cached_network_image_ce.git" source: git - version: "3.4.1" - cached_network_image_platform_interface: + 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: @@ -564,14 +567,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_html: dependency: "direct main" description: @@ -1630,46 +1625,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 43c33c537..6d58f381d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,13 +37,17 @@ dependencies: app_links: ^7.1.1 archive: ^4.0.0 - audio_service: ^0.18.15 + audio_service: + git: + url: https://github.com/bggRGjQaUbCoE/audio_service.git + path: audio_service + ref: dev audio_session: ^0.2.2 battery_plus: ^7.0.0 brotli: ^0.6.0 - cached_network_image: + cached_network_image_ce: git: - url: https://github.com/bggRGjQaUbCoE/flutter_cached_network_image.git + url: https://github.com/bggRGjQaUbCoE/flutter_cached_network_image_ce.git path: cached_network_image ref: dev canvas_danmaku: @@ -81,7 +85,6 @@ dependencies: ref: dev fixnum: ^1.1.1 flex_seed_scheme: ^4.0.1 - flutter_cache_manager: ^3.4.1 flutter_html: ^3.0.0-beta.2 flutter_inappwebview: ^6.1.5 flutter_smart_dialog: