From 459f84b2081dbe0d7b83099f812f7e4503b7ea0c Mon Sep 17 00:00:00 2001 From: dom Date: Mon, 11 May 2026 12:51:45 +0800 Subject: [PATCH] image cache patch Signed-off-by: dom --- .../widgets/image/network_img_layer.dart | 9 +- .../widgets/image_grid/image_grid_view.dart | 3 +- .../widgets/image_viewer/gallery_viewer.dart | 4 +- lib/common/widgets/pendant_avatar.dart | 3 +- lib/pages/about/view.dart | 3 +- lib/pages/article/view.dart | 9 +- lib/pages/article/widgets/article_ops.dart | 3 +- lib/pages/article/widgets/html_render.dart | 5 +- lib/pages/article/widgets/opus_content.dart | 11 +- lib/pages/audio/view.dart | 8 +- .../publish/common_rich_text_pub_page.dart | 5 +- lib/pages/download/detail/widgets/item.dart | 7 +- lib/pages/dynamics/widgets/author_panel.dart | 3 +- .../dynamics/widgets/live_panel_sub.dart | 3 +- .../dynamics/widgets/live_rcmd_panel.dart | 3 +- lib/pages/dynamics/widgets/module_panel.dart | 3 +- lib/pages/dynamics/widgets/up_panel.dart | 3 +- lib/pages/dynamics/widgets/video_panel.dart | 3 +- lib/pages/dynamics_topic/view.dart | 3 +- lib/pages/episode_panel/view.dart | 3 +- lib/pages/live_room/view.dart | 5 +- .../live_search/widgets/live_search_user.dart | 3 +- lib/pages/member/widget/medal_wall.dart | 3 +- lib/pages/member/widget/user_info_card.dart | 9 +- lib/pages/mine/view.dart | 7 +- lib/pages/pgc_review/child/view.dart | 3 +- lib/pages/save_panel/view.dart | 3 +- lib/pages/search_panel/user/widgets/item.dart | 3 +- lib/pages/search_trending/view.dart | 7 +- lib/pages/video/download_panel/view.dart | 3 +- lib/pages/video/introduction/local/view.dart | 9 +- .../introduction/pgc/widgets/pgc_panel.dart | 5 +- .../video/introduction/ugc/widgets/page.dart | 3 +- .../introduction/ugc/widgets/season.dart | 3 +- lib/pages/video/member/view.dart | 3 +- lib/pages/video/note/view.dart | 3 +- lib/pages/video/pay_coins/view.dart | 8 +- .../video/reply/widgets/reply_item_grpc.dart | 7 +- lib/pages/video/view.dart | 3 +- lib/pages/whisper/widgets/item.dart | 3 +- lib/pages/whisper_detail/view.dart | 3 +- .../whisper_detail/widget/chat_item.dart | 3 +- lib/plugin/pl_player/view/view.dart | 3 +- lib/scripts/image.patch | 165 ++++++++++++++++++ lib/scripts/patch.ps1 | 7 +- lib/utils/extension/num_ext.dart | 11 -- pubspec.lock | 18 +- pubspec.yaml | 6 +- 48 files changed, 260 insertions(+), 143 deletions(-) create mode 100644 lib/scripts/image.patch diff --git a/lib/common/widgets/image/network_img_layer.dart b/lib/common/widgets/image/network_img_layer.dart index d8168a9dc..02f32a89b 100644 --- a/lib/common/widgets/image/network_img_layer.dart +++ b/lib/common/widgets/image/network_img_layer.dart @@ -1,7 +1,6 @@ import 'package:PiliPlus/common/assets.dart'; import 'package:PiliPlus/common/style.dart'; 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:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; @@ -60,11 +59,11 @@ class NetworkImgLayer extends StatelessWidget { required bool isEmote, required bool isAvatar, }) { - int? memCacheWidth, memCacheHeight; + double? memCacheWidth, memCacheHeight; if (cacheWidth ?? width <= height) { - memCacheWidth = width.cacheSize(context); + memCacheWidth = width; } else { - memCacheHeight = height.cacheSize(context); + memCacheHeight = height; } return CachedNetworkImage( imageUrl: ImageUtils.thumbnailUrl( @@ -112,7 +111,7 @@ class NetworkImgLayer extends StatelessWidget { isAvatar ? Assets.avatarPlaceHolder : Assets.loading, width: width, height: height, - cacheWidth: width.cacheSize(context), + cacheWidth: width, ), ), ); diff --git a/lib/common/widgets/image_grid/image_grid_view.dart b/lib/common/widgets/image_grid/image_grid_view.dart index 245f6fa1c..d58a43ed0 100644 --- a/lib/common/widgets/image_grid/image_grid_view.dart +++ b/lib/common/widgets/image_grid/image_grid_view.dart @@ -24,7 +24,6 @@ import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/image_grid/image_grid_builder.dart'; import 'package:PiliPlus/models/common/image_preview_type.dart'; import 'package:PiliPlus/utils/extension/context_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:PiliPlus/utils/page_utils.dart'; @@ -215,7 +214,7 @@ class ImageGridView extends StatelessWidget { Assets.loading, width: width, height: height, - cacheWidth: width.cacheSize(context), + cacheWidth: width, ), ); return List.generate(picArr.length, (index) { diff --git a/lib/common/widgets/image_viewer/gallery_viewer.dart b/lib/common/widgets/image_viewer/gallery_viewer.dart index c70b273ea..7f4dc17c2 100644 --- a/lib/common/widgets/image_viewer/gallery_viewer.dart +++ b/lib/common/widgets/image_viewer/gallery_viewer.dart @@ -400,7 +400,7 @@ class _GalleryViewerState extends State child = Image( key: _key, image: ResizeImage.resizeIfNeeded( - _containerSize.width.cacheSize(context), + _containerSize.width, null, CachedNetworkImageProvider(_getActualUrl(item.url)), ), @@ -420,7 +420,7 @@ class _GalleryViewerState extends State } else { return Image( image: ResizeImage.resizeIfNeeded( - _containerSize.width.cacheSize(context), + _containerSize.width, null, CachedNetworkImageProvider( ImageUtils.thumbnailUrl( diff --git a/lib/common/widgets/pendant_avatar.dart b/lib/common/widgets/pendant_avatar.dart index 354007631..eab36391c 100644 --- a/lib/common/widgets/pendant_avatar.dart +++ b/lib/common/widgets/pendant_avatar.dart @@ -4,7 +4,6 @@ import 'package:PiliPlus/common/widgets/extra_hittest_stack.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/avatar_badge_type.dart'; import 'package:PiliPlus/models/common/image_type.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:flutter/material.dart'; @@ -143,7 +142,7 @@ class PendantAvatar extends StatelessWidget { Assets.vipIcon, width: badgeSize, height: badgeSize, - cacheWidth: badgeSize.cacheSize(context), + cacheWidth: badgeSize, semanticLabel: badgeType.desc, ), _ => Icon( diff --git a/lib/pages/about/view.dart b/lib/pages/about/view.dart index 98e35784c..477cc4501 100644 --- a/lib/pages/about/view.dart +++ b/lib/pages/about/view.dart @@ -17,7 +17,6 @@ import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/cache_manager.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/device_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/login_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -109,7 +108,7 @@ class _AboutPageState extends State { width: 150, height: 150, excludeFromSemantics: true, - cacheWidth: 150.cacheSize(context), + cacheWidth: 150, Assets.logo, ), ), diff --git a/lib/pages/article/view.dart b/lib/pages/article/view.dart index 4694bb962..1961faf7a 100644 --- a/lib/pages/article/view.dart +++ b/lib/pages/article/view.dart @@ -19,7 +19,6 @@ import 'package:PiliPlus/pages/dynamics_repost/view.dart'; import 'package:PiliPlus/pages/webview/view.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/extension/get_ext.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/grid.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/num_utils.dart'; @@ -274,15 +273,15 @@ class _ArticlePageState extends CommonDynPageState { itemCount: length, itemBuilder: (context, index) { final pic = pics[index]; - int? memCacheWidth, memCacheHeight; + double? memCacheWidth, memCacheHeight; if (pic.isLongPic ?? false) { - memCacheWidth = maxWidth.cacheSize(context); + memCacheWidth = maxWidth; } else if (pic.width != null && pic.height != null) { if (pic.width! > pic.height!) { - memCacheWidth = maxWidth.cacheSize(context); + memCacheWidth = maxWidth; } else { - memCacheHeight = height.cacheSize(context); + memCacheHeight = height; } } return GestureDetector( diff --git a/lib/pages/article/widgets/article_ops.dart b/lib/pages/article/widgets/article_ops.dart index 2a9309bb6..e0837e14f 100644 --- a/lib/pages/article/widgets/article_ops.dart +++ b/lib/pages/article/widgets/article_ops.dart @@ -4,7 +4,6 @@ import 'package:PiliPlus/common/style.dart'; 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/extension/num_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; @@ -72,7 +71,7 @@ class ArticleOpus extends StatelessWidget { child: CachedNetworkImage( width: width, height: height, - memCacheWidth: width.cacheSize(context), + memCacheWidth: width, imageUrl: ImageUtils.thumbnailUrl( card.url, maxQuality: 60, diff --git a/lib/pages/article/widgets/html_render.dart b/lib/pages/article/widgets/html_render.dart index 54a72554d..f71ea0f0f 100644 --- a/lib/pages/article/widgets/html_render.dart +++ b/lib/pages/article/widgets/html_render.dart @@ -1,7 +1,6 @@ import 'package:PiliPlus/common/assets.dart'; import 'package:PiliPlus/common/widgets/image_viewer/hero.dart'; 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'; @@ -43,7 +42,7 @@ Widget htmlRender({ if (clazz?.contains('cut-off') == true || height != null) { return CachedNetworkImage( width: maxWidth, - memCacheWidth: maxWidth.cacheSize(context), + memCacheWidth: maxWidth, height: height != null ? double.parse(height) : null, imageUrl: ImageUtils.thumbnailUrl(imgUrl), fit: BoxFit.contain, @@ -61,7 +60,7 @@ Widget htmlRender({ child: CachedNetworkImage( width: width, height: isEmote ? 22.0 : null, - memCacheWidth: width.cacheSize(context), + memCacheWidth: width, imageUrl: ImageUtils.thumbnailUrl(imgUrl, maxQuality: 60), fadeInDuration: const Duration(milliseconds: 120), fadeOutDuration: const Duration(milliseconds: 120), diff --git a/lib/pages/article/widgets/opus_content.dart b/lib/pages/article/widgets/opus_content.dart index 048353462..1b236ed64 100644 --- a/lib/pages/article/widgets/opus_content.dart +++ b/lib/pages/article/widgets/opus_content.dart @@ -15,7 +15,6 @@ import 'package:PiliPlus/models/dynamics/article_content_model.dart' import 'package:PiliPlus/models/dynamics/result.dart'; 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/extension/string_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -230,7 +229,7 @@ class OpusContent extends StatelessWidget { Widget child = CachedNetworkImage( width: width, height: height, - memCacheWidth: width.cacheSize(context), + memCacheWidth: width, imageUrl: ImageUtils.thumbnailUrl(pic.url!, maxQuality: 60), fadeInDuration: const Duration(milliseconds: 120), fadeOutDuration: const Duration(milliseconds: 120), @@ -270,7 +269,7 @@ class OpusContent extends StatelessWidget { fit: .contain, height: height, width: maxWidth, - memCacheWidth: maxWidth.cacheSize(context), + memCacheWidth: maxWidth, imageUrl: ImageUtils.thumbnailUrl(element.line!.pic!.url!), placeholder: (_, _) => const SizedBox.shrink(), ); @@ -733,7 +732,7 @@ Widget moduleBlockedItem( : moduleBlocked.bgImg!.imgDay, ), ), - width: width.cacheSize(context), + width: width, ), ), ); @@ -742,7 +741,7 @@ Widget moduleBlockedItem( Widget icon(double width) { return CachedNetworkImage( width: width, - memCacheWidth: width.cacheSize(context), + memCacheWidth: width, fit: BoxFit.contain, imageUrl: ImageUtils.thumbnailUrl( isDarkMode ? moduleBlocked.icon!.imgDark : moduleBlocked.icon!.imgDay, @@ -778,7 +777,7 @@ Widget moduleBlockedItem( CachedNetworkImage( height: 16, color: Colors.white, - memCacheHeight: 16.cacheSize(context), + memCacheHeight: 16, placeholder: (_, _) => const SizedBox.shrink(), imageUrl: ImageUtils.safeThumbnailUrl(moduleBlocked.button!.icon), ), diff --git a/lib/pages/audio/view.dart b/lib/pages/audio/view.dart index 55310525c..a16c61093 100644 --- a/lib/pages/audio/view.dart +++ b/lib/pages/audio/view.dart @@ -298,9 +298,7 @@ class _AudioPageState extends State { Assets.livingStatic, width: 16, height: 16, - cacheWidth: 16.cacheSize( - context, - ), + cacheWidth: 16, color: colorScheme.primary, ), ), @@ -342,9 +340,7 @@ class _AudioPageState extends State { Assets.livingStatic, width: 16, height: 16, - cacheWidth: 16.cacheSize( - context, - ), + cacheWidth: 16, color: colorScheme.primary, ), ), 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 6d8b62436..d230bfff7 100644 --- a/lib/pages/common/publish/common_rich_text_pub_page.dart +++ b/lib/pages/common/publish/common_rich_text_pub_page.dart @@ -15,7 +15,6 @@ import 'package:PiliPlus/models_new/live/live_emote/emoticon.dart'; import 'package:PiliPlus/pages/common/publish/common_publish_page.dart'; import 'package:PiliPlus/pages/dynamics_mention/view.dart'; import 'package:PiliPlus/utils/extension/file_ext.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/string_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -145,13 +144,13 @@ abstract class CommonRichTextPubPageState File(e.path), height: height, filterQuality: .low, - cacheHeight: height.cacheSize(context), + cacheHeight: height, ), OpusPicModel e => CachedNetworkImage( imageUrl: ImageUtils.thumbnailUrl(e.url!), height: height, filterQuality: .low, - memCacheHeight: height.cacheSize(context), + memCacheHeight: height, fadeInDuration: .zero, fadeOutDuration: .zero, placeholder: (_, _) => const SizedBox(width: 42), diff --git a/lib/pages/download/detail/widgets/item.dart b/lib/pages/download/detail/widgets/item.dart index aa79d86e1..a2447ef73 100644 --- a/lib/pages/download/detail/widgets/item.dart +++ b/lib/pages/download/detail/widgets/item.dart @@ -16,7 +16,6 @@ import 'package:PiliPlus/pages/download/downloading/view.dart'; import 'package:PiliPlus/services/download/download_service.dart'; import 'package:PiliPlus/utils/cache_manager.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/path_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -177,11 +176,11 @@ class DetailItem extends StatelessWidget { ); final maxWidth = constraints.maxWidth; final maxHeight = constraints.maxHeight; - int? cacheWidth, cacheHeight; + double? cacheWidth, cacheHeight; if (entry.pageData?.cacheWidth ?? false) { - cacheWidth = maxWidth.cacheSize(context); + cacheWidth = maxWidth; } else { - cacheHeight = maxHeight.cacheSize(context); + cacheHeight = maxHeight; } return cover.existsSync() ? ClipRRect( diff --git a/lib/pages/dynamics/widgets/author_panel.dart b/lib/pages/dynamics/widgets/author_panel.dart index 75f5a3de7..c21489800 100644 --- a/lib/pages/dynamics/widgets/author_panel.dart +++ b/lib/pages/dynamics/widgets/author_panel.dart @@ -18,7 +18,6 @@ import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/color_utils.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; -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'; @@ -183,7 +182,7 @@ class AuthorPanel extends StatelessWidget { child: Center( child: CachedNetworkImage( height: height, - memCacheHeight: height.cacheSize(context), + memCacheHeight: height, imageUrl: ImageUtils.safeThumbnailUrl( moduleAuthor.decorate!.cardUrl, ), diff --git a/lib/pages/dynamics/widgets/live_panel_sub.dart b/lib/pages/dynamics/widgets/live_panel_sub.dart index aa40b2ebe..c2fe1dea0 100644 --- a/lib/pages/dynamics/widgets/live_panel_sub.dart +++ b/lib/pages/dynamics/widgets/live_panel_sub.dart @@ -5,7 +5,6 @@ import 'package:PiliPlus/common/widgets/flutter/layout_builder.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:flutter/material.dart' hide LayoutBuilder; Widget livePanelSub( @@ -61,7 +60,7 @@ Widget livePanelSub( top: 6, child: Image.asset( height: 16, - cacheHeight: 16.cacheSize(context), + cacheHeight: 16, Assets.livingRect, filterQuality: FilterQuality.low, ), diff --git a/lib/pages/dynamics/widgets/live_rcmd_panel.dart b/lib/pages/dynamics/widgets/live_rcmd_panel.dart index 0e5b3289e..c2509f8ac 100644 --- a/lib/pages/dynamics/widgets/live_rcmd_panel.dart +++ b/lib/pages/dynamics/widgets/live_rcmd_panel.dart @@ -5,7 +5,6 @@ import 'package:PiliPlus/common/widgets/flutter/layout_builder.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:flutter/material.dart' hide LayoutBuilder; Widget liveRcmdPanel( @@ -55,7 +54,7 @@ Widget liveRcmdPanel( top: 6, child: Image.asset( height: 16, - cacheHeight: 16.cacheSize(context), + cacheHeight: 16, Assets.livingRect, filterQuality: FilterQuality.low, ), diff --git a/lib/pages/dynamics/widgets/module_panel.dart b/lib/pages/dynamics/widgets/module_panel.dart index 1c346604f..eacc26156 100644 --- a/lib/pages/dynamics/widgets/module_panel.dart +++ b/lib/pages/dynamics/widgets/module_panel.dart @@ -11,7 +11,6 @@ import 'package:PiliPlus/pages/dynamics/widgets/live_panel_sub.dart'; import 'package:PiliPlus/pages/dynamics/widgets/live_rcmd_panel.dart'; import 'package:PiliPlus/pages/dynamics/widgets/video_panel.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:PiliPlus/utils/page_utils.dart'; import 'package:cached_network_image/cached_network_image.dart'; @@ -145,7 +144,7 @@ Widget module( width: 45, height: 45, fit: BoxFit.cover, - memCacheWidth: 45.cacheSize(context), + memCacheWidth: 45, imageUrl: ImageUtils.safeThumbnailUrl(common.cover), ), ), diff --git a/lib/pages/dynamics/widgets/up_panel.dart b/lib/pages/dynamics/widgets/up_panel.dart index 9e6c8c85f..fad16193e 100644 --- a/lib/pages/dynamics/widgets/up_panel.dart +++ b/lib/pages/dynamics/widgets/up_panel.dart @@ -6,7 +6,6 @@ import 'package:PiliPlus/models/dynamics/up.dart'; import 'package:PiliPlus/pages/dynamics/controller.dart'; import 'package:PiliPlus/pages/live_follow/view.dart'; import 'package:PiliPlus/utils/accounts.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:flutter/material.dart'; @@ -161,7 +160,7 @@ class _UpPanelState extends State { child: Image.asset( width: 38, height: 38, - cacheWidth: 38.cacheSize(context), + cacheWidth: 38, Assets.logo, ), ); diff --git a/lib/pages/dynamics/widgets/video_panel.dart b/lib/pages/dynamics/widgets/video_panel.dart index 92106bdbe..dd6a897a8 100644 --- a/lib/pages/dynamics/widgets/video_panel.dart +++ b/lib/pages/dynamics/widgets/video_panel.dart @@ -6,7 +6,6 @@ import 'package:PiliPlus/common/widgets/flutter/layout_builder.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:flutter/material.dart' hide LayoutBuilder; @@ -126,7 +125,7 @@ Widget videoSeasonWidget( Assets.play, width: 50, height: 50, - cacheHeight: 50.cacheSize(context), + cacheHeight: 50, ), ], ), diff --git a/lib/pages/dynamics_topic/view.dart b/lib/pages/dynamics_topic/view.dart index 654c47df1..d7e407d9e 100644 --- a/lib/pages/dynamics_topic/view.dart +++ b/lib/pages/dynamics_topic/view.dart @@ -15,7 +15,6 @@ import 'package:PiliPlus/pages/dynamics/widgets/dynamic_panel.dart'; import 'package:PiliPlus/pages/dynamics_create/view.dart'; import 'package:PiliPlus/pages/dynamics_topic/controller.dart'; import 'package:PiliPlus/pages/webview/view.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/global_data.dart'; import 'package:PiliPlus/utils/num_utils.dart'; @@ -172,7 +171,7 @@ class _DynTopicPageState extends State with DynMixin { decoration: BoxDecoration( image: DecorationImage( image: ResizeImage( - width: MediaQuery.widthOf(context).cacheSize(context), + width: MediaQuery.widthOf(context), const AssetImage(Assets.topicHeader), ), filterQuality: FilterQuality.low, diff --git a/lib/pages/episode_panel/view.dart b/lib/pages/episode_panel/view.dart index faea2c42b..b1b7bf226 100644 --- a/lib/pages/episode_panel/view.dart +++ b/lib/pages/episode_panel/view.dart @@ -26,7 +26,6 @@ import 'package:PiliPlus/pages/video/introduction/ugc/widgets/page.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/scroll_controller_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -511,7 +510,7 @@ class _EpisodePanelState extends State Assets.livingStatic, color: primary, height: 12, - cacheHeight: 12.cacheSize(context), + cacheHeight: 12, semanticLabel: "正在播放:", ), Expanded( diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index 914ef0fb3..7746af5e9 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -34,7 +34,6 @@ import 'package:PiliPlus/plugin/pl_player/models/play_status.dart'; import 'package:PiliPlus/plugin/pl_player/utils/danmaku_options.dart'; import 'package:PiliPlus/plugin/pl_player/view/view.dart'; import 'package:PiliPlus/services/service_locator.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/size_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -373,7 +372,7 @@ class _LiveRoomPageState extends State fit: BoxFit.cover, width: maxWidth, height: maxHeight, - memCacheWidth: maxWidth.cacheSize(context), + memCacheWidth: maxWidth, imageUrl: ImageUtils.safeThumbnailUrl(appBackground), placeholder: (_, _) => const SizedBox.shrink(), ); @@ -383,7 +382,7 @@ class _LiveRoomPageState extends State fit: BoxFit.cover, width: maxWidth, height: maxHeight, - cacheWidth: maxWidth.cacheSize(context), + cacheWidth: maxWidth, ); } return Positioned.fill( diff --git a/lib/pages/live_search/widgets/live_search_user.dart b/lib/pages/live_search/widgets/live_search_user.dart index d201349a3..9aac2e0bc 100644 --- a/lib/pages/live_search/widgets/live_search_user.dart +++ b/lib/pages/live_search/widgets/live_search_user.dart @@ -2,7 +2,6 @@ import 'package:PiliPlus/common/assets.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/models_new/live/live_search/user_item.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:flutter/material.dart'; @@ -53,7 +52,7 @@ class LiveSearchUserItem extends StatelessWidget { const SizedBox(width: 10), Image.asset( height: 14, - cacheHeight: 14.cacheSize(context), + cacheHeight: 14, Assets.livingRect, ), ], diff --git a/lib/pages/member/widget/medal_wall.dart b/lib/pages/member/widget/medal_wall.dart index 632ca6d7d..179de8357 100644 --- a/lib/pages/member/widget/medal_wall.dart +++ b/lib/pages/member/widget/medal_wall.dart @@ -4,7 +4,6 @@ import 'package:PiliPlus/common/widgets/pendant_avatar.dart'; import 'package:PiliPlus/models_new/live/live_medal_wall/data.dart'; import 'package:PiliPlus/pages/member/widget/medal_widget.dart'; import 'package:PiliPlus/utils/app_scheme.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:flutter/material.dart'; @@ -109,7 +108,7 @@ class MedalWall extends StatelessWidget { child: Image.asset( Assets.livingStatic, height: 16, - cacheHeight: 16.cacheSize(context), + cacheHeight: 16, color: colorScheme.primary, ), ), diff --git a/lib/pages/member/widget/user_info_card.dart b/lib/pages/member/widget/user_info_card.dart index ff20ce376..0331ddf12 100644 --- a/lib/pages/member/widget/user_info_card.dart +++ b/lib/pages/member/widget/user_info_card.dart @@ -27,7 +27,6 @@ import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/bili_utils.dart'; import 'package:PiliPlus/utils/color_utils.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/string_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -223,7 +222,7 @@ class UserInfoCard extends StatelessWidget { isSeniorMember: card.levelInfo?.identity == 2, ), height: 11, - cacheHeight: 11.cacheSize(context), + cacheHeight: 11, semanticLabel: '等级${card.levelInfo?.currentLevel}', ), if (card.vip?.status == 1) @@ -588,7 +587,7 @@ class UserInfoCard extends StatelessWidget { ); } final controller = headerControllerBuilder(); - final memCacheWidth = width.cacheSize(context); + final memCacheWidth = width; return GestureDetector( behavior: .opaque, onTap: () => PageUtils.imageView( @@ -693,7 +692,7 @@ class UserInfoCard extends StatelessWidget { alignment: alignment, height: kHeaderHeight, width: width, - memCacheWidth: width.cacheSize(context), + memCacheWidth: width, imageUrl: ImageUtils.thumbnailUrl(imgUrl), placeholder: (_, _) => const SizedBox(width: .infinity, height: kHeaderHeight), @@ -740,7 +739,7 @@ class UserInfoCard extends StatelessWidget { if (icon != null) ...[ CachedNetworkImage( height: 20, - memCacheHeight: 20.cacheSize(context), + memCacheHeight: 20, imageUrl: ImageUtils.thumbnailUrl(icon), placeholder: (_, _) => const SizedBox.shrink(), fadeInDuration: .zero, diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index a310bbb44..6ea2a0b4e 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -12,7 +12,6 @@ import 'package:PiliPlus/pages/mine/controller.dart'; import 'package:PiliPlus/pages/mine/widgets/item.dart'; import 'package:PiliPlus/utils/bili_utils.dart'; import 'package:PiliPlus/utils/extension/get_ext.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; @@ -217,7 +216,7 @@ class _MediaPageState extends State child: Image.asset( Assets.vipIcon, height: 19, - cacheHeight: 19.cacheSize(context), + cacheHeight: 19, semanticLabel: "大会员", ), ), @@ -227,7 +226,7 @@ class _MediaPageState extends State child: Image.asset( width: 55, height: 55, - cacheHeight: 55.cacheSize(context), + cacheHeight: 55, Assets.avatarPlaceHolder, semanticLabel: "默认头像", ), @@ -261,7 +260,7 @@ class _MediaPageState extends State isSeniorMember: userInfo.isSeniorMember == 1, ), height: 10, - cacheHeight: 10.cacheSize(context), + cacheHeight: 10, ), ], ), diff --git a/lib/pages/pgc_review/child/view.dart b/lib/pages/pgc_review/child/view.dart index 4adf3c585..2b2ced4bf 100644 --- a/lib/pages/pgc_review/child/view.dart +++ b/lib/pages/pgc_review/child/view.dart @@ -15,7 +15,6 @@ import 'package:PiliPlus/pages/pgc_review/post/view.dart'; import 'package:PiliPlus/pages/webview/view.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/bili_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -243,7 +242,7 @@ class _PgcReviewChildPageState extends State Image.asset( BiliUtils.levelName(item.author!.level!), height: 11, - cacheHeight: 11.cacheSize(context), + cacheHeight: 11, ), ], ), diff --git a/lib/pages/save_panel/view.dart b/lib/pages/save_panel/view.dart index ec485597f..9b5eeb7d1 100644 --- a/lib/pages/save_panel/view.dart +++ b/lib/pages/save_panel/view.dart @@ -15,7 +15,6 @@ import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; import 'package:PiliPlus/pages/video/reply/widgets/reply_item_grpc.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; -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/platform_utils.dart'; @@ -512,7 +511,7 @@ class _SavePanelState extends State { child: Image.asset( Assets.logo2, width: 100, - cacheWidth: 100.cacheSize(context), + cacheWidth: 100, color: theme.colorScheme.onSurfaceVariant, ), ), diff --git a/lib/pages/search_panel/user/widgets/item.dart b/lib/pages/search_panel/user/widgets/item.dart index fdb45feeb..f411defee 100644 --- a/lib/pages/search_panel/user/widgets/item.dart +++ b/lib/pages/search_panel/user/widgets/item.dart @@ -1,7 +1,6 @@ import 'package:PiliPlus/common/widgets/pendant_avatar.dart'; import 'package:PiliPlus/models/search/result.dart'; import 'package:PiliPlus/utils/bili_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get_core/src/get_main.dart'; @@ -58,7 +57,7 @@ class SearchUserItem extends StatelessWidget { isSeniorMember: item.isSeniorMember == 1, ), height: 11, - cacheHeight: 11.cacheSize(context), + cacheHeight: 11, semanticLabel: '等级${item.level}', ), ], diff --git a/lib/pages/search_trending/view.dart b/lib/pages/search_trending/view.dart index 63f7165e3..aa14b1076 100644 --- a/lib/pages/search_trending/view.dart +++ b/lib/pages/search_trending/view.dart @@ -11,7 +11,6 @@ import 'package:PiliPlus/pages/search_trending/controller.dart'; import 'package:PiliPlus/utils/color_utils.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; 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'; @@ -86,7 +85,7 @@ class _SearchTrendingPageState extends State { child: Image.asset( width: width, height: height, - cacheWidth: width.cacheSize(context), + cacheWidth: width, Assets.trendingBanner, filterQuality: FilterQuality.low, ), @@ -208,7 +207,7 @@ class _SearchTrendingPageState extends State { const SizedBox(width: 4), CachedNetworkImage( height: 16, - memCacheHeight: 16.cacheSize(context), + memCacheHeight: 16, imageUrl: ImageUtils.thumbnailUrl(item.icon!), placeholder: (_, _) => const SizedBox.shrink(), ), @@ -218,7 +217,7 @@ class _SearchTrendingPageState extends State { Assets.livingRect, width: 51, height: 16, - cacheHeight: 16.cacheSize(context), + cacheHeight: 16, ), ], ], diff --git a/lib/pages/video/download_panel/view.dart b/lib/pages/video/download_panel/view.dart index 8bd1b1d60..bdd0df513 100644 --- a/lib/pages/video/download_panel/view.dart +++ b/lib/pages/video/download_panel/view.dart @@ -20,7 +20,6 @@ import 'package:PiliPlus/services/download/download_service.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; @@ -430,7 +429,7 @@ class _DownloadPanelState extends State { Assets.livingStatic, color: primary, height: 12, - cacheHeight: 12.cacheSize(context), + cacheHeight: 12, semanticLabel: '正在播放:', ), Expanded( diff --git a/lib/pages/video/introduction/local/view.dart b/lib/pages/video/introduction/local/view.dart index 200ce0645..0268c0dd2 100644 --- a/lib/pages/video/introduction/local/view.dart +++ b/lib/pages/video/introduction/local/view.dart @@ -8,7 +8,6 @@ import 'package:PiliPlus/models/common/video/video_quality.dart'; import 'package:PiliPlus/models_new/download/bili_download_entry_info.dart'; import 'package:PiliPlus/pages/video/introduction/local/controller.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/path_utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -88,12 +87,8 @@ class _LocalIntroPanelState extends State width: 140.8, height: 88, fit: BoxFit.cover, - cacheWidth: cacheWidth - ? 140.8.cacheSize(context) - : null, - cacheHeight: cacheWidth - ? null - : 88.cacheSize(context), + cacheWidth: cacheWidth ? 140.8 : null, + cacheHeight: cacheWidth ? null : 88, ), ) : NetworkImgLayer( diff --git a/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart b/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart index 2fec611e3..d71a83149 100644 --- a/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart +++ b/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart @@ -7,7 +7,6 @@ import 'package:PiliPlus/models_new/video/video_detail/episode.dart' hide EpisodeItem; import 'package:PiliPlus/pages/video/controller.dart'; import 'package:PiliPlus/utils/accounts.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; @@ -194,7 +193,7 @@ class _PgcPanelState extends State { Assets.livingStatic, color: theme.primary, height: 12, - cacheHeight: 12.cacheSize(context), + cacheHeight: 12, semanticLabel: "正在播放:", ), ), @@ -216,7 +215,7 @@ class _PgcPanelState extends State { Image.asset( Assets.vipIcon, height: 16, - cacheHeight: 16.cacheSize(context), + cacheHeight: 16, semanticLabel: "大会员", ) else diff --git a/lib/pages/video/introduction/ugc/widgets/page.dart b/lib/pages/video/introduction/ugc/widgets/page.dart index 5b249cc2e..8fa3ab834 100644 --- a/lib/pages/video/introduction/ugc/widgets/page.dart +++ b/lib/pages/video/introduction/ugc/widgets/page.dart @@ -5,7 +5,6 @@ import 'package:PiliPlus/common/assets.dart'; import 'package:PiliPlus/models_new/video/video_detail/page.dart'; import 'package:PiliPlus/pages/video/controller.dart'; import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; @@ -201,7 +200,7 @@ class _PagesPanelState extends State { Assets.livingStatic, color: theme.colorScheme.primary, height: 12, - cacheHeight: 12.cacheSize(context), + cacheHeight: 12, semanticLabel: "正在播放:", ), const SizedBox(width: 6), diff --git a/lib/pages/video/introduction/ugc/widgets/season.dart b/lib/pages/video/introduction/ugc/widgets/season.dart index 4120d8638..2cd43f50b 100644 --- a/lib/pages/video/introduction/ugc/widgets/season.dart +++ b/lib/pages/video/introduction/ugc/widgets/season.dart @@ -6,7 +6,6 @@ import 'package:PiliPlus/models_new/video/video_detail/episode.dart'; import 'package:PiliPlus/models_new/video/video_detail/section.dart'; import 'package:PiliPlus/pages/video/controller.dart'; import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -130,7 +129,7 @@ class _SeasonPanelState extends State { Assets.livingStatic, color: theme.colorScheme.primary, height: 12, - cacheHeight: 12.cacheSize(context), + cacheHeight: 12, semanticLabel: "正在播放:", ), const SizedBox(width: 10), diff --git a/lib/pages/video/member/view.dart b/lib/pages/video/member/view.dart index 0893c101e..aacf1664f 100644 --- a/lib/pages/video/member/view.dart +++ b/lib/pages/video/member/view.dart @@ -20,7 +20,6 @@ import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; import 'package:PiliPlus/pages/video/member/controller.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/bili_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; @@ -263,7 +262,7 @@ class _HorizontalMemberPageState extends State { isSeniorMember: memberInfoModel.isSeniorMember == 1, ), height: 11, - cacheHeight: 11.cacheSize(context), + cacheHeight: 11, ), ], ), diff --git a/lib/pages/video/note/view.dart b/lib/pages/video/note/view.dart index 6d1864df2..1e67b8ae6 100644 --- a/lib/pages/video/note/view.dart +++ b/lib/pages/video/note/view.dart @@ -10,7 +10,6 @@ import 'package:PiliPlus/pages/video/note/controller.dart'; import 'package:PiliPlus/pages/webview/view.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/bili_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'; import 'package:flutter/material.dart'; @@ -269,7 +268,7 @@ class _NoteListPageState extends State isSeniorMember: item.author!.isSeniorMember == 1, ), height: 11, - cacheHeight: 11.cacheSize(context), + cacheHeight: 11, ), ], ), diff --git a/lib/pages/video/pay_coins/view.dart b/lib/pages/video/pay_coins/view.dart index 9f93d44ee..7ce95f576 100644 --- a/lib/pages/video/pay_coins/view.dart +++ b/lib/pages/video/pay_coins/view.dart @@ -261,7 +261,7 @@ class _PayCoinsPageState extends State payImg, width: 110, height: 155, - cacheWidth: 110.cacheSize(context), + cacheWidth: 110, ), ), ), @@ -352,7 +352,7 @@ class _PayCoinsPageState extends State width: 16, height: 28, index == 0 ? Assets.leftDisable : Assets.left, - cacheWidth: 16.cacheSize(context), + cacheWidth: 16, ), ), ); @@ -375,7 +375,7 @@ class _PayCoinsPageState extends State width: 16, height: 28, index == 1 ? Assets.rightDisable : Assets.right, - cacheWidth: 16.cacheSize(context), + cacheWidth: 16, ), ), ); @@ -452,7 +452,7 @@ class _PayCoinsPageState extends State Assets.panelClose, width: 30, height: 30, - cacheWidth: 30.cacheSize(context), + cacheWidth: 30, ), ), ), diff --git a/lib/pages/video/reply/widgets/reply_item_grpc.dart b/lib/pages/video/reply/widgets/reply_item_grpc.dart index fec36116d..f26ea6850 100644 --- a/lib/pages/video/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/reply/widgets/reply_item_grpc.dart @@ -31,7 +31,6 @@ import 'package:PiliPlus/utils/danmaku_utils.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; -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/platform_utils.dart'; @@ -179,7 +178,7 @@ class ReplyItemGrpc extends StatelessWidget { isSeniorMember: senior.isSeniorMember == 1, ), height: 11, - cacheHeight: 11.cacheSize(context), + cacheHeight: 11, ), if (replyItem.mid == upMid) const PBadge( @@ -250,7 +249,7 @@ class ReplyItemGrpc extends StatelessWidget { height: height, child: CachedNetworkImage( height: height, - memCacheHeight: height.cacheSize(context), + memCacheHeight: height, imageUrl: ImageUtils.safeThumbnailUrl(garb.cardImage), placeholder: (_, _) => const SizedBox.shrink(), ), @@ -630,7 +629,7 @@ class ReplyItemGrpc extends StatelessWidget { WidgetSpan( child: CachedNetworkImage( height: 19, - memCacheHeight: 19.cacheSize(context), + memCacheHeight: 19, color: theme.colorScheme.primary, imageUrl: ImageUtils.thumbnailUrl(url.prefixIcon), placeholder: (_, _) => const SizedBox.shrink(), diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 44b671e77..5ecaeae49 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -49,7 +49,6 @@ import 'package:PiliPlus/services/service_locator.dart'; import 'package:PiliPlus/services/shutdown_timer_service.dart' show shutdownTimerService; import 'package:PiliPlus/utils/accounts.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/scroll_controller_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -1331,7 +1330,7 @@ class _VideoDetailPageVState extends State Assets.play, width: 60, height: 60, - cacheHeight: 60.cacheSize(context), + cacheHeight: 60, ), ), ), diff --git a/lib/pages/whisper/widgets/item.dart b/lib/pages/whisper/widgets/item.dart index cb0b1c265..17f48b6c2 100644 --- a/lib/pages/whisper/widgets/item.dart +++ b/lib/pages/whisper/widgets/item.dart @@ -10,7 +10,6 @@ import 'package:PiliPlus/grpc/bilibili/app/im/v1.pb.dart' import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/pages/whisper_secondary/view.dart'; import 'package:PiliPlus/utils/date_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -281,7 +280,7 @@ class WhisperSessionItem extends StatelessWidget { Image.asset( Assets.livingRect, height: 15, - cacheHeight: 15.cacheSize(context), + cacheHeight: 15, filterQuality: FilterQuality.low, ), ], diff --git a/lib/pages/whisper_detail/view.dart b/lib/pages/whisper_detail/view.dart index 4c2afa004..b8bbd5bbf 100644 --- a/lib/pages/whisper_detail/view.dart +++ b/lib/pages/whisper_detail/view.dart @@ -19,7 +19,6 @@ import 'package:PiliPlus/pages/whisper_detail/controller.dart'; import 'package:PiliPlus/pages/whisper_detail/widget/chat_item.dart'; import 'package:PiliPlus/pages/whisper_link_setting/view.dart'; import 'package:PiliPlus/utils/extension/file_ext.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/widget_ext.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -93,7 +92,7 @@ class _WhisperDetailPageState Image.asset( Assets.livingRect, height: 16, - cacheHeight: 16.cacheSize(context), + cacheHeight: 16, filterQuality: FilterQuality.low, ), ], diff --git a/lib/pages/whisper_detail/widget/chat_item.dart b/lib/pages/whisper_detail/widget/chat_item.dart index 10a01f4f1..ece9ac258 100644 --- a/lib/pages/whisper_detail/widget/chat_item.dart +++ b/lib/pages/whisper_detail/widget/chat_item.dart @@ -18,7 +18,6 @@ import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; -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'; @@ -796,7 +795,7 @@ class ChatItem extends StatelessWidget { borderRadius: Style.mdRadius, child: CachedNetworkImage( width: maxWidth, - memCacheWidth: maxWidth.cacheSize(context), + memCacheWidth: maxWidth, imageUrl: ImageUtils.thumbnailUrl(content['pic_url']), placeholder: (_, _) => const SizedBox.shrink(), ), diff --git a/lib/plugin/pl_player/view/view.dart b/lib/plugin/pl_player/view/view.dart index abd477dfc..4978c776d 100644 --- a/lib/plugin/pl_player/view/view.dart +++ b/lib/plugin/pl_player/view/view.dart @@ -41,7 +41,6 @@ import 'package:PiliPlus/plugin/pl_player/widgets/forward_seek.dart'; import 'package:PiliPlus/plugin/pl_player/widgets/play_pause_btn.dart'; import 'package:PiliPlus/utils/connectivity_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; -import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -1667,7 +1666,7 @@ class _PLVideoPlayerState extends State Image.asset( Assets.buffering, height: 25, - cacheHeight: 25.cacheSize(context), + cacheHeight: 25, semanticLabel: "加载中", color: Colors.white, ), diff --git a/lib/scripts/image.patch b/lib/scripts/image.patch new file mode 100644 index 000000000..d8bc6d40c --- /dev/null +++ b/lib/scripts/image.patch @@ -0,0 +1,165 @@ +diff --git a/packages/flutter/lib/src/painting/image_provider.dart b/packages/flutter/lib/src/painting/image_provider.dart +index 995fd68d748..261264df3f3 100644 +--- a/packages/flutter/lib/src/painting/image_provider.dart ++++ b/packages/flutter/lib/src/painting/image_provider.dart +@@ -1273,12 +1273,12 @@ class ResizeImage extends ImageProvider { + /// The width the image should decode to and cache. + /// + /// At least one of this and [height] must be non-null. +- final int? width; ++ final num? width; + + /// The height the image should decode to and cache. + /// + /// At least one of this and [width] must be non-null. +- final int? height; ++ final num? height; + + /// The policy that determines how [width] and [height] are interpreted. + /// +@@ -1300,8 +1300,8 @@ class ResizeImage extends ImageProvider { + /// When `cacheWidth` and `cacheHeight` are both null, this will return the + /// `provider` directly. + static ImageProvider resizeIfNeeded( +- int? cacheWidth, +- int? cacheHeight, ++ num? cacheWidth, ++ num? cacheHeight, + ImageProvider provider, + ) { + if (cacheWidth != null || cacheHeight != null) { +@@ -1329,8 +1329,8 @@ class ResizeImage extends ImageProvider { + ); + return decode( + buffer, +- cacheWidth: width, +- cacheHeight: height, ++ cacheWidth: key._width, ++ cacheHeight: key._height, + allowUpscaling: this.allowUpscaling, + ); + } +@@ -1348,6 +1348,9 @@ class ResizeImage extends ImageProvider { + + @override + ImageStreamCompleter loadImage(ResizeImageKey key, ImageDecoderCallback decode) { ++ final int? effectiveWidth = key._width; ++ final int? effectiveHeight = key._height; ++ + Future decodeResize( + ui.ImmutableBuffer buffer, { + ui.TargetImageSizeCallback? getTargetSize, +@@ -1362,8 +1365,9 @@ class ResizeImage extends ImageProvider { + getTargetSize: (int intrinsicWidth, int intrinsicHeight) { + switch (policy) { + case ResizeImagePolicy.exact: +- int? targetWidth = width; +- int? targetHeight = height; ++ var targetWidth = effectiveWidth; ++ var targetHeight = effectiveHeight; ++ + + if (!allowUpscaling) { + if (targetWidth != null && targetWidth > intrinsicWidth) { +@@ -1377,8 +1381,8 @@ class ResizeImage extends ImageProvider { + return ui.TargetImageSize(width: targetWidth, height: targetHeight); + case ResizeImagePolicy.fit: + final double aspectRatio = intrinsicWidth / intrinsicHeight; +- final int maxWidth = width ?? intrinsicWidth; +- final int maxHeight = height ?? intrinsicHeight; ++ final int maxWidth = effectiveWidth ?? intrinsicWidth; ++ final int maxHeight = effectiveHeight ?? intrinsicHeight; + var targetWidth = intrinsicWidth; + var targetHeight = intrinsicHeight; + +@@ -1393,12 +1397,12 @@ class ResizeImage extends ImageProvider { + } + + if (allowUpscaling) { +- if (width == null) { +- assert(height != null); +- targetHeight = height!; ++ if (effectiveWidth == null) { ++ assert(effectiveHeight != null); ++ targetHeight = effectiveHeight!; + targetWidth = (targetHeight * aspectRatio).floor(); +- } else if (height == null) { +- targetWidth = width!; ++ } else if (effectiveHeight == null) { ++ targetWidth = effectiveWidth; + targetHeight = targetWidth ~/ aspectRatio; + } else { + final int derivedMaxWidth = (maxHeight * aspectRatio).floor(); +@@ -1439,6 +1443,10 @@ class ResizeImage extends ImageProvider { + + @override + Future obtainKey(ImageConfiguration configuration) { ++ final double devicePixelRatio = configuration.devicePixelRatio ?? 1.0; ++ final int? effectiveWidth = width != null ? (width! * devicePixelRatio).round() : null; ++ final int? effectiveHeight = height != null ? (height! * devicePixelRatio).round() : null; ++ + Completer? completer; + // If the imageProvider.obtainKey future is synchronous, then we will be able to fill in result with + // a value before completer is initialized below. +@@ -1448,11 +1456,11 @@ class ResizeImage extends ImageProvider { + // This future has completed synchronously (completer was never assigned), + // so we can directly create the synchronous result to return. + result = SynchronousFuture( +- ResizeImageKey._(key, policy, width, height, allowUpscaling), ++ ResizeImageKey._(key, policy, effectiveWidth, effectiveHeight, allowUpscaling), + ); + } else { + // This future did not synchronously complete. +- completer.complete(ResizeImageKey._(key, policy, width, height, allowUpscaling)); ++ completer.complete(ResizeImageKey._(key, policy, effectiveWidth, effectiveHeight, allowUpscaling)); + } + }); + if (result != null) { +diff --git a/packages/flutter/lib/src/widgets/image.dart b/packages/flutter/lib/src/widgets/image.dart +index e1d2d257e56..30429ea5e02 100644 +--- a/packages/flutter/lib/src/widgets/image.dart ++++ b/packages/flutter/lib/src/widgets/image.dart +@@ -469,8 +469,8 @@ class Image extends StatefulWidget { + this.filterQuality = FilterQuality.medium, + this.isAntiAlias = false, + Map? headers, +- int? cacheWidth, +- int? cacheHeight, ++ num? cacheWidth, ++ num? cacheHeight, + WebHtmlElementStrategy webHtmlElementStrategy = WebHtmlElementStrategy.never, + }) : image = ResizeImage.resizeIfNeeded( + cacheWidth, +@@ -538,8 +538,8 @@ class Image extends StatefulWidget { + this.gaplessPlayback = false, + this.isAntiAlias = false, + this.filterQuality = FilterQuality.medium, +- int? cacheWidth, +- int? cacheHeight, ++ num? cacheWidth, ++ num? cacheHeight, + }) : // FileImage is not supported on Flutter Web therefore neither this method. + assert( + !kIsWeb, +@@ -701,8 +701,8 @@ class Image extends StatefulWidget { + this.isAntiAlias = false, + String? package, + this.filterQuality = FilterQuality.medium, +- int? cacheWidth, +- int? cacheHeight, ++ num? cacheWidth, ++ num? cacheHeight, + }) : image = ResizeImage.resizeIfNeeded( + cacheWidth, + cacheHeight, +@@ -763,8 +763,8 @@ class Image extends StatefulWidget { + this.gaplessPlayback = false, + this.isAntiAlias = false, + this.filterQuality = FilterQuality.medium, +- int? cacheWidth, +- int? cacheHeight, ++ num? cacheWidth, ++ num? cacheHeight, + }) : image = ResizeImage.resizeIfNeeded( + cacheWidth, + cacheHeight, diff --git a/lib/scripts/patch.ps1 b/lib/scripts/patch.ps1 index 6540dec86..7a91d1ba9 100644 --- a/lib/scripts/patch.ps1 +++ b/lib/scripts/patch.ps1 @@ -26,6 +26,10 @@ $NavigationBarPatch = "lib/scripts/navigation_bar.patch" $PaddingPatch = "lib/scripts/padding.patch" +# https://github.com/flutter/flutter/issues/56239 +# ref https://github.com/flutter/flutter/pull/184549 +$ImagePatch = "lib/scripts/image.patch" + # TODO: remove # https://github.com/flutter/flutter/issues/90223 $ModalBarrierPatch = "lib/scripts/modal_barrier.patch" @@ -45,7 +49,8 @@ Set-Location $env:FLUTTER_ROOT $picks = @() $reverts = @() -$patches = @($ModalBarrierPatch, $TextSelectionPatch, $MouseCursorPatch, $NavigationBarPatch, $PaddingPatch) +$patches = @($ModalBarrierPatch, $TextSelectionPatch, $MouseCursorPatch, + $NavigationBarPatch, $PaddingPatch, $ImagePatch) switch ($platform.ToLower()) { "android" { diff --git a/lib/utils/extension/num_ext.dart b/lib/utils/extension/num_ext.dart index 5e46e6b2f..a7b8e6cf8 100644 --- a/lib/utils/extension/num_ext.dart +++ b/lib/utils/extension/num_ext.dart @@ -1,16 +1,5 @@ import 'dart:math' show pow; -import 'package:flutter/widgets.dart' show BuildContext, MediaQuery; - -extension ImageExtension on num { - int? cacheSize(BuildContext context) { - if (this == 0) { - return null; - } - return (this * MediaQuery.devicePixelRatioOf(context)).round(); - } -} - extension IntExt on int? { int? operator +(int other) => this == null ? null : this! + other; int? operator -(int other) => this == null ? null : this! - other; diff --git a/pubspec.lock b/pubspec.lock index 96d7a7ee0..f81af0335 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -204,10 +204,11 @@ packages: cached_network_image: dependency: "direct main" description: - name: cached_network_image - sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" - url: "https://pub.dev" - source: hosted + path: cached_network_image + ref: dev + resolved-ref: "3582e14c5d9ca92b0f0b3737e5e8a80a8fb77464" + url: "https://github.com/bggRGjQaUbCoE/flutter_cached_network_image.git" + source: git version: "3.4.1" cached_network_image_platform_interface: dependency: transitive @@ -1233,10 +1234,11 @@ packages: octo_image: dependency: transitive description: - name: octo_image - sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" - url: "https://pub.dev" - source: hosted + path: "." + ref: dev + resolved-ref: adb9eeec1fa6dc7becb58596f93715141190519d + url: "https://github.com/bggRGjQaUbCoE/octo_image.git" + source: git version: "2.1.0" package_config: dependency: transitive diff --git a/pubspec.yaml b/pubspec.yaml index b0f8fd725..69cd5655f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,7 +41,11 @@ dependencies: audio_session: ^0.2.2 battery_plus: ^7.0.0 brotli: ^0.6.0 - cached_network_image: ^3.4.1 + cached_network_image: + git: + url: https://github.com/bggRGjQaUbCoE/flutter_cached_network_image.git + path: cached_network_image + ref: dev canvas_danmaku: git: url: https://github.com/bggRGjQaUbCoE/canvas_danmaku.git