From 09be4f45f0e77b90a53918c85e8773e080e09e53 Mon Sep 17 00:00:00 2001 From: dom Date: Thu, 14 May 2026 12:13:17 +0800 Subject: [PATCH] opt ui Signed-off-by: dom --- .fvmrc | 3 - ios/Podfile.lock | 14 +- ios/Runner.xcodeproj/project.pbxproj | 6 +- lib/common/widgets/scaffold.dart | 14 ++ .../sliver/sliver_floating_header.dart | 9 +- lib/pages/about/view.dart | 2 +- lib/pages/article_list/view.dart | 7 +- lib/pages/contact/view.dart | 83 +++---- lib/pages/danmaku_block/view.dart | 72 +++--- lib/pages/download/detail/view.dart | 8 +- lib/pages/download/downloading/view.dart | 8 +- lib/pages/download/search/view.dart | 9 +- lib/pages/download/view.dart | 11 +- lib/pages/dynamics/widgets/vote.dart | 2 +- lib/pages/dynamics_topic/view.dart | 5 +- lib/pages/episode_panel/view.dart | 31 ++- lib/pages/fav/topic/view.dart | 2 +- lib/pages/fav/video/view.dart | 4 - lib/pages/fav/video/widgets/item.dart | 15 +- lib/pages/fav/view.dart | 216 +++++++++--------- lib/pages/fav_detail/controller.dart | 4 - lib/pages/fav_detail/view.dart | 16 +- lib/pages/fav_folder_sort/view.dart | 17 +- lib/pages/fav_search/view.dart | 9 +- lib/pages/fav_sort/view.dart | 13 +- lib/pages/follow_tag_sort/view.dart | 12 +- lib/pages/follow_type/view.dart | 2 +- lib/pages/history_search/view.dart | 9 +- lib/pages/later_search/view.dart | 5 +- lib/pages/live/view.dart | 16 +- lib/pages/live_area_detail/child/view.dart | 2 +- lib/pages/live_follow/view.dart | 2 +- lib/pages/live_search/child/view.dart | 2 +- lib/pages/member/widget/user_info_card.dart | 2 +- lib/pages/member_audio/view.dart | 1 - lib/pages/member_coin_arc/view.dart | 2 +- lib/pages/member_favorite/view.dart | 28 +-- lib/pages/member_favorite/widget/item.dart | 6 +- lib/pages/member_home/view.dart | 9 +- lib/pages/member_home/widgets/fav_item.dart | 10 +- lib/pages/member_like_arc/view.dart | 2 +- lib/pages/member_pgc/view.dart | 2 +- lib/pages/member_upower_rank/view.dart | 3 +- lib/pages/mine/view.dart | 2 - lib/pages/mine/widgets/item.dart | 14 +- lib/pages/pgc/view.dart | 10 +- lib/pages/pgc_index/view.dart | 2 +- lib/pages/rank/zone/view.dart | 2 +- lib/pages/rcmd/view.dart | 2 +- lib/pages/save_panel/view.dart | 7 +- lib/pages/search/view.dart | 3 +- lib/pages/search_panel/all/view.dart | 6 +- lib/pages/search_panel/live/view.dart | 2 +- lib/pages/search_panel/pgc/view.dart | 1 - lib/pages/setting/extra_setting.dart | 2 +- lib/pages/setting/pages/bar_set.dart | 102 --------- lib/pages/setting/play_setting.dart | 2 +- lib/pages/setting/privacy_setting.dart | 2 +- lib/pages/setting/slide_color_picker.dart | 4 +- lib/pages/setting/style_setting.dart | 2 +- lib/pages/setting/video_setting.dart | 2 +- lib/pages/subscription/widgets/item.dart | 15 +- lib/pages/subscription_detail/controller.dart | 2 - lib/pages/subscription_detail/view.dart | 19 +- lib/pages/video/ai_conclusion/view.dart | 180 --------------- lib/pages/video/download_panel/view.dart | 21 +- .../video/introduction/local/controller.dart | 2 +- lib/pages/video/introduction/local/view.dart | 29 ++- lib/pages/video/medialist/view.dart | 30 ++- lib/pages/video/member/view.dart | 6 +- lib/pages/video/pay_coins/view.dart | 13 +- lib/pages/video/view.dart | 8 +- lib/pages/video/view_point/view.dart | 21 +- lib/router/app_pages.dart | 2 - lib/scripts/patch.ps1 | 14 -- lib/utils/app_scheme.dart | 16 +- lib/utils/grid.dart | 32 +-- lib/utils/page_utils.dart | 5 +- 78 files changed, 428 insertions(+), 849 deletions(-) delete mode 100644 .fvmrc delete mode 100644 lib/pages/setting/pages/bar_set.dart delete mode 100644 lib/pages/video/ai_conclusion/view.dart diff --git a/.fvmrc b/.fvmrc deleted file mode 100644 index d80cf5773..000000000 --- a/.fvmrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "flutter": "3.41.9" -} \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index ebeafc0c8..4e2851b50 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -33,10 +33,6 @@ PODS: - Flutter - fluttertoast (0.0.2): - Flutter - - gt3_flutter_plugin (0.0.9): - - Flutter - - GT3Captcha-iOS - - GT3Captcha-iOS (0.15.9) - image_cropper (0.0.5): - Flutter - TOCropViewController (~> 3.1.2) @@ -59,7 +55,7 @@ PODS: - Flutter - saver_gallery (0.0.1): - Flutter - - screen_brightness_ios (0.1.0): + - screen_brightness_ios (2.1.3): - Flutter - share_plus (0.0.1): - Flutter @@ -90,7 +86,6 @@ DEPENDENCIES: - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) - flutter_volume_controller (from `.symlinks/plugins/flutter_volume_controller/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - - gt3_flutter_plugin (from `.symlinks/plugins/gt3_flutter_plugin/ios`) - image_cropper (from `.symlinks/plugins/image_cropper/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - live_photo_maker (from `.symlinks/plugins/live_photo_maker/ios`) @@ -110,7 +105,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - - GT3Captcha-iOS - OrderedSet - TOCropViewController @@ -143,8 +137,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_volume_controller/ios" fluttertoast: :path: ".symlinks/plugins/fluttertoast/ios" - gt3_flutter_plugin: - :path: ".symlinks/plugins/gt3_flutter_plugin/ios" image_cropper: :path: ".symlinks/plugins/image_cropper/ios" image_picker_ios: @@ -193,8 +185,6 @@ SPEC CHECKSUMS: flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf flutter_volume_controller: c2be490cb0487e8b88d0d9fc2b7e1c139a4ebccb fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1 - gt3_flutter_plugin: 37090e5fa66ff2a52939eb9d208fc36fa49d36e5 - GT3Captcha-iOS: aeb6fed2e8594099821430a89208679e5a55b740 image_cropper: fca51f94982730acae168c4b5d691e0f11aeb259 image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326 live_photo_maker: 29280ca88323bd5a33aafd00d98624d5cf522176 @@ -206,7 +196,7 @@ SPEC CHECKSUMS: package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d saver_gallery: af2d0c762dafda254e0ad025ef0dabd6506cd490 - screen_brightness_ios: 9953fd7da5bd480f1a93990daeec2eb42d4f3b52 + screen_brightness_ios: 212d950bb99c915eee971c884f4a6c87c92cd13d share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index e316c85e1..eba4fe1db 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -360,7 +360,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -438,7 +438,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -487,7 +487,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/lib/common/widgets/scaffold.dart b/lib/common/widgets/scaffold.dart index ccda4121f..de2c17398 100644 --- a/lib/common/widgets/scaffold.dart +++ b/lib/common/widgets/scaffold.dart @@ -1,6 +1,20 @@ import 'package:flutter/material.dart'; Widget scaffold({ + required Widget appBar, + required Widget body, +}) { + return Material( + child: Column( + children: [ + appBar, + Expanded(child: body), + ], + ), + ); +} + +Widget scaffold_({ Widget? appBar, required Widget body, }) { diff --git a/lib/common/widgets/sliver/sliver_floating_header.dart b/lib/common/widgets/sliver/sliver_floating_header.dart index 5b87b9e8e..78b2a2cc8 100644 --- a/lib/common/widgets/sliver/sliver_floating_header.dart +++ b/lib/common/widgets/sliver/sliver_floating_header.dart @@ -17,6 +17,7 @@ import 'dart:math' as math; +import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:flutter/foundation.dart' show clampDouble; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart' @@ -36,9 +37,15 @@ class SliverFloatingHeaderWidget extends StatelessWidget { @override Widget build(BuildContext context) { + if (PlatformUtils.isDesktop) { + return _SliverFloatingHeaderWidget( + backgroundColor: backgroundColor, + child: _SliverFloatingHeaderScroll(child: child), + ); + } return _SliverFloatingHeaderWidget( backgroundColor: backgroundColor, - child: _SliverFloatingHeaderScroll(child: child), + child: child, ); } } diff --git a/lib/pages/about/view.dart b/lib/pages/about/view.dart index 477cc4501..dfe58c029 100644 --- a/lib/pages/about/view.dart +++ b/lib/pages/about/view.dart @@ -87,7 +87,7 @@ class _AboutPageState extends State { final subTitleStyle = TextStyle(fontSize: 13, color: outline); final showAppBar = widget.showAppBar; final padding = MediaQuery.viewPaddingOf(context); - return scaffold( + return scaffold_( appBar: showAppBar ? AppBar(title: const Text('关于')) : null, body: ListView( padding: EdgeInsets.only( diff --git a/lib/pages/article_list/view.dart b/lib/pages/article_list/view.dart index 27e608792..5ab69cc68 100644 --- a/lib/pages/article_list/view.dart +++ b/lib/pages/article_list/view.dart @@ -30,10 +30,15 @@ class _ArticleListPageState extends State with GridMixin { late EdgeInsets padding; + @override + void didChangeDependencies() { + super.didChangeDependencies(); + padding = MediaQuery.viewPaddingOf(context); + } + @override Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); - padding = MediaQuery.viewPaddingOf(context); return Material( color: theme.colorScheme.surface, child: refreshIndicator( diff --git a/lib/pages/contact/view.dart b/lib/pages/contact/view.dart index 2081c1ac9..761610db8 100644 --- a/lib/pages/contact/view.dart +++ b/lib/pages/contact/view.dart @@ -1,4 +1,3 @@ -import 'package:PiliPlus/common/widgets/scaffold.dart'; import 'package:PiliPlus/common/widgets/scroll_physics.dart'; import 'package:PiliPlus/pages/fan/view.dart'; import 'package:PiliPlus/pages/follow/child/child_view.dart'; @@ -40,46 +39,52 @@ class _ContactPageState extends State @override Widget build(BuildContext context) { - return scaffold( - appBar: AppBar( - title: const Text('通讯录'), - bottom: TabBar( - controller: _controller, - tabs: const [ - Tab(text: '我的关注'), - Tab(text: '我的粉丝'), - ], - ), - actions: [ - IconButton( - onPressed: () async { - final UserModel? userModel = await Navigator.of(context).push( - GetPageRoute( - page: () => FollowSearchPage( - mid: mid, - isFromSelect: widget.isFromSelect, - ), - ), - ); - if (userModel != null) { - Get.back(result: userModel); - } - }, - icon: const Icon(Icons.search), - ), - const SizedBox(width: 16), - ], - ), - body: tabBarView( - controller: _controller, + return Material( + child: Column( children: [ - FollowChildPage( - mid: mid, - onSelect: widget.isFromSelect ? onSelect : null, + AppBar( + title: const Text('通讯录'), + actions: [ + IconButton( + onPressed: () async { + final UserModel? userModel = await Navigator.of(context).push( + GetPageRoute( + page: () => FollowSearchPage( + mid: mid, + isFromSelect: widget.isFromSelect, + ), + ), + ); + if (userModel != null) { + Get.back(result: userModel); + } + }, + icon: const Icon(Icons.search), + ), + const SizedBox(width: 16), + ], ), - FansPage( - showName: false, - onSelect: widget.isFromSelect ? onSelect : null, + TabBar( + controller: _controller, + tabs: const [ + Tab(text: '我的关注'), + Tab(text: '我的粉丝'), + ], + ), + Expanded( + child: tabBarView( + controller: _controller, + children: [ + FollowChildPage( + mid: mid, + onSelect: widget.isFromSelect ? onSelect : null, + ), + FansPage( + showName: false, + onSelect: widget.isFromSelect ? onSelect : null, + ), + ], + ), ), ], ), diff --git a/lib/pages/danmaku_block/view.dart b/lib/pages/danmaku_block/view.dart index 1cc2b4392..a7ab217a0 100644 --- a/lib/pages/danmaku_block/view.dart +++ b/lib/pages/danmaku_block/view.dart @@ -2,7 +2,6 @@ import 'package:PiliPlus/common/widgets/button/icon_button.dart'; import 'package:PiliPlus/common/widgets/dialog/dialog.dart'; import 'package:PiliPlus/common/widgets/keep_alive_wrapper.dart'; import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart'; -import 'package:PiliPlus/common/widgets/scaffold.dart'; import 'package:PiliPlus/common/widgets/scroll_physics.dart'; import 'package:PiliPlus/models/common/dm_block_type.dart'; import 'package:PiliPlus/models/user/danmaku_block.dart'; @@ -50,46 +49,53 @@ class _DanmakuBlockPageState extends State { @override Widget build(BuildContext context) { - return scaffold( - appBar: AppBar( - title: const Text('弹幕屏蔽'), - bottom: TabBar( - controller: _controller.tabController, - tabs: DmBlockType.values - .map( - (e) => Obx( - () => Tab( - text: '${e.label}(${_controller.rules[e.index].length})', - ), - ), - ) - .toList(), - ), - ), - body: Stack( - clipBehavior: .none, + return Material( + child: Column( children: [ - tabBarView( + AppBar(title: const Text('弹幕屏蔽')), + TabBar( controller: _controller.tabController, - children: DmBlockType.values + tabs: DmBlockType.values .map( - (e) => KeepAliveWrapper( - child: Obx( - () => tabViewBuilder(e.index, _controller.rules[e.index]), + (e) => Obx( + () => Tab( + text: '${e.label}(${_controller.rules[e.index].length})', ), ), ) .toList(), ), - Positioned( - right: kFloatingActionButtonMargin, - bottom: padding.bottom + kFloatingActionButtonMargin, - child: FloatingActionButton( - tooltip: '添加', - onPressed: () => _showAddDialog( - DmBlockType.values[_controller.tabController.index], - ), - child: const Icon(Icons.add), + Expanded( + child: Stack( + clipBehavior: .none, + children: [ + tabBarView( + controller: _controller.tabController, + children: DmBlockType.values + .map( + (e) => KeepAliveWrapper( + child: Obx( + () => tabViewBuilder( + e.index, + _controller.rules[e.index], + ), + ), + ), + ) + .toList(), + ), + Positioned( + right: kFloatingActionButtonMargin, + bottom: padding.bottom + kFloatingActionButtonMargin, + child: FloatingActionButton( + tooltip: '添加', + onPressed: () => _showAddDialog( + DmBlockType.values[_controller.tabController.index], + ), + child: const Icon(Icons.add), + ), + ), + ], ), ), ], diff --git a/lib/pages/download/detail/view.dart b/lib/pages/download/detail/view.dart index 8256819d4..09c4357d3 100644 --- a/lib/pages/download/detail/view.dart +++ b/lib/pages/download/detail/view.dart @@ -37,7 +37,7 @@ class DownloadDetailPage extends StatefulWidget { } class _DownloadDetailPageState extends State - with BaseMultiSelectMixin { + with BaseMultiSelectMixin, GridMixin { StreamSubscription? _sub; final _downloadItems = RxList(); final _controller = Get.find(); @@ -149,11 +149,7 @@ class _DownloadDetailPageState extends State sliver: Obx(() { if (_downloadItems.isNotEmpty) { return SliverGrid.builder( - gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: 2, - mainAxisExtent: 100, - maxCrossAxisExtent: Grid.smallCardWidth * 2, - ), + gridDelegate: gridDelegate, itemBuilder: (context, index) { final entry = _downloadItems[index]; return DetailItem( diff --git a/lib/pages/download/downloading/view.dart b/lib/pages/download/downloading/view.dart index 9998ccfa3..865ecca26 100644 --- a/lib/pages/download/downloading/view.dart +++ b/lib/pages/download/downloading/view.dart @@ -23,7 +23,7 @@ class DownloadingPage extends StatefulWidget { } class _DownloadingPageState extends State - with BaseMultiSelectMixin { + with BaseMultiSelectMixin, GridMixin { final _downloadService = Get.find(); late final _waitDownloadQueue = _downloadService.waitDownloadQueue; @override @@ -69,11 +69,7 @@ class _DownloadingPageState extends State sliver: Obx(() { if (_waitDownloadQueue.isNotEmpty) { return SliverGrid.builder( - gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: 2, - mainAxisExtent: 100, - maxCrossAxisExtent: Grid.smallCardWidth * 2, - ), + gridDelegate: gridDelegate, itemCount: _waitDownloadQueue.length, itemBuilder: (context, index) { final entry = _waitDownloadQueue[index]; diff --git a/lib/pages/download/search/view.dart b/lib/pages/download/search/view.dart index dd4d6dfb3..73de66f33 100644 --- a/lib/pages/download/search/view.dart +++ b/lib/pages/download/search/view.dart @@ -29,7 +29,8 @@ class _DownloadSearchPageState DownloadSearchPage, List, BiliDownloadEntryInfo - > { + > + with GridMixin { @override DownloadSearchController controller = Get.put(DownloadSearchController()); final _downloadService = Get.find(); @@ -84,11 +85,7 @@ class _DownloadSearchPageState Widget buildList(List list) { if (list.isNotEmpty) { return SliverGrid.builder( - gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: 2, - mainAxisExtent: 100, - maxCrossAxisExtent: Grid.smallCardWidth * 2, - ), + gridDelegate: gridDelegate, itemBuilder: (context, index) { final entry = list[index]; return DetailItem( diff --git a/lib/pages/download/view.dart b/lib/pages/download/view.dart index 1affe1847..9dace7b1c 100644 --- a/lib/pages/download/view.dart +++ b/lib/pages/download/view.dart @@ -34,7 +34,7 @@ class DownloadPage extends StatefulWidget { State createState() => _DownloadPageState(); } -class _DownloadPageState extends State { +class _DownloadPageState extends State with GridMixin { final _downloadService = Get.find(); final _controller = Get.put(DownloadPageController()); final _progress = ChangeNotifier(); @@ -139,7 +139,7 @@ class _DownloadPageState extends State { ), SliverToBoxAdapter( child: SizedBox( - height: 100, + height: 110, child: DetailItem( entry: entry, progress: _progress, @@ -172,12 +172,7 @@ class _DownloadPageState extends State { ), ), SliverGrid.builder( - gridDelegate: - SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: 2, - mainAxisExtent: 100, - maxCrossAxisExtent: Grid.smallCardWidth * 2, - ), + gridDelegate: gridDelegate, itemBuilder: (context, index) { final item = _controller.pages[index]; if (item.entries.length == 1) { diff --git a/lib/pages/dynamics/widgets/vote.dart b/lib/pages/dynamics/widgets/vote.dart index 17bbb126e..502729834 100644 --- a/lib/pages/dynamics/widgets/vote.dart +++ b/lib/pages/dynamics/widgets/vote.dart @@ -95,7 +95,7 @@ class _VotePanelState extends State { maxCrossAxisExtent: 100, mainAxisSpacing: 10, crossAxisSpacing: 10, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(50), + mainAxisExtent: 50, ), itemBuilder: (context, index) => _buildPicOptions(index, theme.colorScheme), diff --git a/lib/pages/dynamics_topic/view.dart b/lib/pages/dynamics_topic/view.dart index 4bfac3f73..634ecf5ed 100644 --- a/lib/pages/dynamics_topic/view.dart +++ b/lib/pages/dynamics_topic/view.dart @@ -5,7 +5,6 @@ import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/common/widgets/pair.dart'; -import 'package:PiliPlus/common/widgets/scaffold.dart'; import 'package:PiliPlus/common/widgets/sliver/sliver_pinned_header.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/common/image_type.dart'; @@ -47,8 +46,8 @@ class _DynTopicPageState extends State with DynMixin { Widget build(BuildContext context) { final colorScheme = ColorScheme.of(context); final padding = MediaQuery.viewPaddingOf(context); - return scaffold( - body: Stack( + return Material( + child: Stack( clipBehavior: .none, children: [ refreshIndicator( diff --git a/lib/pages/episode_panel/view.dart b/lib/pages/episode_panel/view.dart index b1b7bf226..489303530 100644 --- a/lib/pages/episode_panel/view.dart +++ b/lib/pages/episode_panel/view.dart @@ -13,7 +13,6 @@ import 'package:PiliPlus/common/widgets/stat/stat.dart'; import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/video.dart'; -import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/common/episode_panel_type.dart'; import 'package:PiliPlus/models/common/stat_type.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart' as pgc; @@ -261,15 +260,15 @@ class _EpisodePanelState extends State } return offset + 7; } else { - return index * 100 + 7; + return index * 112 + 7; } } double _calcItemHeight(ugc.BaseEpisodeItem episode) { if (episode is ugc.EpisodeItem && episode.pages!.length > 1) { - return 145; // 98 + 2 + 10 + 35 + return 157; // 110 + 2 + 10 + 35 } - return 100; + return 112; } Widget _buildBody( @@ -310,7 +309,7 @@ class _EpisodePanelState extends State mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - episodeItem, // 98 + episodeItem, // 110 Padding( padding: const EdgeInsets.symmetric( horizontal: 12, @@ -351,7 +350,7 @@ class _EpisodePanelState extends State isCurrentIndex: isCurrItem, ); }, - itemExtent: 100, + itemExtent: 112, ), ), ], @@ -427,9 +426,9 @@ class _EpisodePanelState extends State return Padding( padding: const EdgeInsets.only(bottom: 2), child: SizedBox( - height: 98, + height: 110, child: Material( - type: MaterialType.transparency, + type: .transparency, child: InkWell( onTap: () { if (episode.badge == "会员" && @@ -461,7 +460,7 @@ class _EpisodePanelState extends State onLongPress: onLongPress, onSecondaryTap: PlatformUtils.isMobile ? null : onLongPress, child: Padding( - padding: const EdgeInsets.symmetric( + padding: const .symmetric( horizontal: Style.safeSpace, vertical: 5, ), @@ -474,8 +473,8 @@ class _EpisodePanelState extends State children: [ NetworkImgLayer( src: cover, - width: 140.8, - height: 88, + width: 160, + height: 100, cacheWidth: cacheWidth, ), if (duration != null && duration > 0) @@ -483,14 +482,14 @@ class _EpisodePanelState extends State text: DurationUtils.formatDuration(duration), right: 6.0, bottom: 6.0, - type: PBadgeType.gray, + type: .gray, ), if (isCharging == true) const PBadge( text: '充电专属', top: 6, right: 6, - type: PBadgeType.error, + type: .error, ) else if (episode.badge != null) PBadge( @@ -498,9 +497,9 @@ class _EpisodePanelState extends State top: 6, right: 6, type: switch (episode.badge) { - '预告' => PBadgeType.gray, - '限免' => PBadgeType.free, - _ => PBadgeType.primary, + '预告' => .gray, + '限免' => .free, + _ => .primary, }, ), ], diff --git a/lib/pages/fav/topic/view.dart b/lib/pages/fav/topic/view.dart index 69f75c3c6..1f4f1682e 100644 --- a/lib/pages/fav/topic/view.dart +++ b/lib/pages/fav/topic/view.dart @@ -57,7 +57,7 @@ class _FavTopicPageState extends State mainAxisSpacing: 12, crossAxisSpacing: 12, maxCrossAxisExtent: Grid.smallCardWidth, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(30), + mainAxisExtent: 30, ); Widget _buildBody( diff --git a/lib/pages/fav/video/view.dart b/lib/pages/fav/video/view.dart index f37ff43ca..6350d1a4a 100644 --- a/lib/pages/fav/video/view.dart +++ b/lib/pages/fav/video/view.dart @@ -5,7 +5,6 @@ import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/fav/video/controller.dart'; import 'package:PiliPlus/pages/fav/video/widgets/item.dart'; import 'package:PiliPlus/utils/grid.dart'; -import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -58,16 +57,13 @@ class _FavVideoPageState extends State _favController.onLoadMore(); } final item = response[index]; - String heroTag = Utils.makeHeroTag(item.fid); return FavVideoItem( - heroTag: heroTag, item: item, onTap: () async { final res = await Get.toNamed( '/favDetail', arguments: item, parameters: { - 'heroTag': heroTag, 'mediaId': item.id.toString(), }, ); diff --git a/lib/pages/fav/video/widgets/item.dart b/lib/pages/fav/video/widgets/item.dart index a6ff4d73c..fef768886 100644 --- a/lib/pages/fav/video/widgets/item.dart +++ b/lib/pages/fav/video/widgets/item.dart @@ -7,7 +7,6 @@ import 'package:PiliPlus/utils/bili_utils.dart'; import 'package:flutter/material.dart' hide LayoutBuilder; class FavVideoItem extends StatelessWidget { - final String heroTag; final FavFolderInfo item; final VoidCallback? onTap; final VoidCallback? onLongPress; @@ -16,14 +15,13 @@ class FavVideoItem extends StatelessWidget { super.key, this.onTap, this.onLongPress, - required this.heroTag, required this.item, }); @override Widget build(BuildContext context) { return Material( - type: MaterialType.transparency, + type: .transparency, child: InkWell( onTap: onTap, onLongPress: @@ -43,13 +41,10 @@ class FavVideoItem extends StatelessWidget { aspectRatio: Style.aspectRatio, child: LayoutBuilder( builder: (context, boxConstraints) { - return Hero( - tag: heroTag, - child: NetworkImgLayer( - src: item.cover, - width: boxConstraints.maxWidth, - height: boxConstraints.maxHeight, - ), + return NetworkImgLayer( + src: item.cover, + width: boxConstraints.maxWidth, + height: boxConstraints.maxHeight, ); }, ), diff --git a/lib/pages/fav/view.dart b/lib/pages/fav/view.dart index 99d394995..aba0ff684 100644 --- a/lib/pages/fav/view.dart +++ b/lib/pages/fav/view.dart @@ -1,4 +1,3 @@ -import 'package:PiliPlus/common/widgets/scaffold.dart'; import 'package:PiliPlus/common/widgets/scroll_physics.dart'; import 'package:PiliPlus/common/widgets/view_safe_area.dart'; import 'package:PiliPlus/http/loading_state.dart'; @@ -52,111 +51,122 @@ class _FavPageState extends State with SingleTickerProviderStateMixin { @override Widget build(BuildContext context) { - return scaffold( - appBar: AppBar( - title: const Text('我的收藏'), - actions: [ - Obx( - () => _showVideoFavMenu.value - ? IconButton( - onPressed: () => Get.toNamed('/createFav')?.then( - (data) { - if (data != null) { - final list = - _favController.loadingState.value.dataOrNull; - if (list != null && list.isNotEmpty) { - list.insert(1, data); - _favController.loadingState.refresh(); - } else { - _favController.loadingState.value = Success([data]); + return Material( + child: Column( + children: [ + AppBar( + title: const Text('我的收藏'), + actions: [ + Obx( + () => _showVideoFavMenu.value + ? IconButton( + onPressed: () => Get.toNamed('/createFav')?.then( + (data) { + if (data != null) { + final list = + _favController.loadingState.value.dataOrNull; + if (list != null && list.isNotEmpty) { + list.insert(1, data); + _favController.loadingState.refresh(); + } else { + _favController.loadingState.value = Success([ + data, + ]); + } + } + }, + ), + icon: const Icon(Icons.add), + tooltip: '新建收藏夹', + ) + : const SizedBox.shrink(), + ), + Obx( + () => _showVideoFavMenu.value + ? IconButton( + onPressed: () { + if (_favController.loadingState.value.isSuccess) { + if (!_favController.isEnd) { + SmartDialog.showToast('加载全部收藏夹再排序'); + return; + } + Get.to( + FavFolderSortPage(favController: _favController), + ); } - } - }, - ), - icon: const Icon(Icons.add), - tooltip: '新建收藏夹', - ) - : const SizedBox.shrink(), + }, + icon: const Icon(Icons.sort), + tooltip: '收藏夹排序', + ) + : const SizedBox.shrink(), + ), + Obx( + () => _showVideoFavMenu.value + ? IconButton( + onPressed: () { + if (_favController.loadingState.value case Success( + :final response, + )) { + try { + final item = response!.first; + Get.toNamed( + '/favSearch', + arguments: { + 'type': 1, + 'mediaId': item.id, + 'title': item.title, + 'count': item.mediaCount, + 'isOwner': true, + }, + ); + } catch (_) {} + } + }, + icon: const Icon(Icons.search_outlined), + tooltip: '搜索', + ) + : const SizedBox.shrink(), + ), + const SizedBox(width: 6), + ], ), - Obx( - () => _showVideoFavMenu.value - ? IconButton( - onPressed: () { - if (_favController.loadingState.value.isSuccess) { - if (!_favController.isEnd) { - SmartDialog.showToast('加载全部收藏夹再排序'); - return; - } - Get.to( - FavFolderSortPage(favController: _favController), - ); - } - }, - icon: const Icon(Icons.sort), - tooltip: '收藏夹排序', - ) - : const SizedBox.shrink(), - ), - Obx( - () => _showVideoFavMenu.value - ? IconButton( - onPressed: () { - if (_favController.loadingState.value case Success( - :final response, - )) { - try { - final item = response!.first; - Get.toNamed( - '/favSearch', - arguments: { - 'type': 1, - 'mediaId': item.id, - 'title': item.title, - 'count': item.mediaCount, - 'isOwner': true, - }, - ); - } catch (_) {} - } - }, - icon: const Icon(Icons.search_outlined), - tooltip: '搜索', - ) - : const SizedBox.shrink(), - ), - const SizedBox(width: 6), - ], - bottom: TabBar( - controller: _tabController, - isScrollable: true, - tabAlignment: TabAlignment.start, - tabs: FavTabType.values.map((item) => Tab(text: item.title)).toList(), - onTap: (index) { - try { - if (!_tabController.indexIsChanging) { - switch (FavTabType.values[index]) { - case FavTabType.video: - _favController.scrollController.animToTop(); - case FavTabType.article: - Get.find().scrollController - .animToTop(); - case FavTabType.topic: - Get.find().scrollController.animToTop(); - case FavTabType.cheese: - Get.find().scrollController - .animToTop(); - default: + TabBar( + controller: _tabController, + isScrollable: true, + tabAlignment: TabAlignment.start, + tabs: FavTabType.values + .map((item) => Tab(text: item.title)) + .toList(), + onTap: (index) { + try { + if (!_tabController.indexIsChanging) { + switch (FavTabType.values[index]) { + case FavTabType.video: + _favController.scrollController.animToTop(); + case FavTabType.article: + Get.find().scrollController + .animToTop(); + case FavTabType.topic: + Get.find().scrollController + .animToTop(); + case FavTabType.cheese: + Get.find().scrollController + .animToTop(); + default: + } } - } - } catch (_) {} - }, - ), - ), - body: ViewSafeArea( - child: tabBarView( - controller: _tabController, - children: FavTabType.values.map((item) => item.page).toList(), - ), + } catch (_) {} + }, + ), + Expanded( + child: ViewSafeArea( + child: tabBarView( + controller: _tabController, + children: FavTabType.values.map((item) => item.page).toList(), + ), + ), + ), + ], ), ); } diff --git a/lib/pages/fav_detail/controller.dart b/lib/pages/fav_detail/controller.dart index 5519969de..21e7af6d4 100644 --- a/lib/pages/fav_detail/controller.dart +++ b/lib/pages/fav_detail/controller.dart @@ -82,7 +82,6 @@ class FavDetailController with BaseFavController { @override late int mediaId; - late String heroTag; final Rx folderInfo = FavFolderInfo().obs; final RxBool _isOwner = false.obs; final Rx order = FavOrderType.mtime.obs; @@ -104,10 +103,7 @@ class FavDetailController @override void onInit() { super.onInit(); - mediaId = int.parse(Get.parameters['mediaId']!); - heroTag = Get.parameters['heroTag']!; - queryData(); } diff --git a/lib/pages/fav_detail/view.dart b/lib/pages/fav_detail/view.dart index 60f43e1d5..1ac9bf171 100644 --- a/lib/pages/fav_detail/view.dart +++ b/lib/pages/fav_detail/view.dart @@ -4,7 +4,6 @@ import 'package:PiliPlus/common/widgets/flutter/pop_scope.dart'; import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; -import 'package:PiliPlus/common/widgets/scaffold.dart'; import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/common/fav_order_type.dart'; @@ -59,8 +58,8 @@ class _FavDetailPageState extends State with GridMixin { _favDetailController.handleSelect(); } }, - child: scaffold( - body: Stack( + child: Material( + child: Stack( clipBehavior: .none, children: [ refreshIndicator( @@ -381,13 +380,10 @@ class _FavDetailPageState extends State with GridMixin { Stack( clipBehavior: Clip.none, children: [ - Hero( - tag: _favDetailController.heroTag, - child: NetworkImgLayer( - width: 176, - height: 110, - src: folderInfo.cover, - ), + NetworkImgLayer( + width: 176, + height: 110, + src: folderInfo.cover, ), Positioned( right: 6, diff --git a/lib/pages/fav_folder_sort/view.dart b/lib/pages/fav_folder_sort/view.dart index c8777e71b..db5738e29 100644 --- a/lib/pages/fav_folder_sort/view.dart +++ b/lib/pages/fav_folder_sort/view.dart @@ -56,25 +56,20 @@ class _FavFolderSortPageState extends State ); } - void onReorder(int oldIndex, int newIndex) { + void onReorderItem(int oldIndex, int newIndex) { if (oldIndex == 0 || newIndex == 0) { SmartDialog.showToast('默认收藏夹不支持排序'); return; } - if (newIndex > oldIndex) { - newIndex -= 1; - } - - final tabsItem = sortList.removeAt(oldIndex); - sortList.insert(newIndex, tabsItem); + sortList.insert(newIndex, sortList.removeAt(oldIndex)); setState(() {}); } Widget get _buildBody { return ReorderableListView.builder( - onReorder: onReorder, + onReorderItem: onReorderItem, proxyDecorator: proxyDecorator, physics: const AlwaysScrollableScrollPhysics(), itemCount: sortList.length, @@ -83,12 +78,10 @@ class _FavFolderSortPageState extends State const EdgeInsets.only(bottom: 100), itemBuilder: (context, index) { final item = sortList[index]; - final key = item.id.toString(); return SizedBox( - key: Key(key), - height: 98, + key: ValueKey(item.id), + height: 110, child: FavVideoItem( - heroTag: key, item: item, onLongPress: index == 0 ? () => SmartDialog.showToast('默认收藏夹不支持排序') diff --git a/lib/pages/fav_search/view.dart b/lib/pages/fav_search/view.dart index db843841a..aca90dcf1 100644 --- a/lib/pages/fav_search/view.dart +++ b/lib/pages/fav_search/view.dart @@ -20,11 +20,8 @@ class FavSearchPage extends StatefulWidget { class _FavSearchPageState extends - CommonSearchPageState< - FavSearchPage, - FavDetailData, - FavDetailItemModel - > { + CommonSearchPageState + with GridMixin { @override final FavSearchController controller = Get.put( FavSearchController(), @@ -88,8 +85,6 @@ class _FavSearchPageState ), ]; - late final gridDelegate = Grid.videoCardHDelegate(context, minHeight: 110); - @override Widget buildList(List list) { return SliverGrid.builder( diff --git a/lib/pages/fav_sort/view.dart b/lib/pages/fav_sort/view.dart index 4b4eea81b..470bf0969 100644 --- a/lib/pages/fav_sort/view.dart +++ b/lib/pages/fav_sort/view.dart @@ -81,11 +81,7 @@ class _FavSortPageState extends State with ReorderMixin { ); } - void onReorder(int oldIndex, int newIndex) { - if (newIndex > oldIndex) { - newIndex -= 1; - } - + void onReorderItem(int oldIndex, int newIndex) { final oldItem = sortList[oldIndex]; final newItem = sortList.getOrNull( oldIndex > newIndex ? newIndex - 1 : newIndex, // might be Negative @@ -94,15 +90,14 @@ class _FavSortPageState extends State with ReorderMixin { '${newItem == null ? '0:0' : '${newItem.id}:${newItem.type}'}:${oldItem.id}:${oldItem.type}', ); - final tabsItem = sortList.removeAt(oldIndex); - sortList.insert(newIndex, tabsItem); + sortList.insert(newIndex, sortList.removeAt(oldIndex)); setState(() {}); } Widget get _buildBody { final child = ReorderableListView.builder( - onReorder: onReorder, + onReorderItem: onReorderItem, proxyDecorator: proxyDecorator, physics: const AlwaysScrollableScrollPhysics(), padding: @@ -113,7 +108,7 @@ class _FavSortPageState extends State with ReorderMixin { final item = sortList[index]; return SizedBox( key: ValueKey(item.id), - height: 98, + height: 110, child: FavVideoCardH(item: item), ); }, diff --git a/lib/pages/follow_tag_sort/view.dart b/lib/pages/follow_tag_sort/view.dart index 3f028a296..d993ac42d 100644 --- a/lib/pages/follow_tag_sort/view.dart +++ b/lib/pages/follow_tag_sort/view.dart @@ -71,20 +71,14 @@ class _FollowTagSortPageState extends State ); } - void onReorder(int oldIndex, int newIndex) { - if (newIndex > oldIndex) { - newIndex -= 1; - } - - final tabsItem = _customTags.removeAt(oldIndex); - _customTags.insert(newIndex, tabsItem); - + void onReorderItem(int oldIndex, int newIndex) { + _customTags.insert(newIndex, _customTags.removeAt(oldIndex)); setState(() {}); } Widget get _buildBody { return ReorderableListView.builder( - onReorder: onReorder, + onReorderItem: onReorderItem, proxyDecorator: proxyDecorator, physics: const AlwaysScrollableScrollPhysics(), padding: EdgeInsets.only( diff --git a/lib/pages/follow_type/view.dart b/lib/pages/follow_type/view.dart index 79bd1653f..cb335d652 100644 --- a/lib/pages/follow_type/view.dart +++ b/lib/pages/follow_type/view.dart @@ -20,7 +20,7 @@ abstract class FollowTypePageState extends State { @override Widget build(BuildContext context) { final theme = Theme.of(context).colorScheme; - return scaffold( + return scaffold_( appBar: appBar, body: refreshIndicator( onRefresh: controller.onRefresh, diff --git a/lib/pages/history_search/view.dart b/lib/pages/history_search/view.dart index 1a50284e8..b5a9ba0f0 100644 --- a/lib/pages/history_search/view.dart +++ b/lib/pages/history_search/view.dart @@ -17,19 +17,14 @@ class HistorySearchPage extends StatefulWidget { class _HistorySearchPageState extends - CommonSearchPageState< - HistorySearchPage, - HistoryData, - HistoryItemModel - > { + CommonSearchPageState + with GridMixin { @override final HistorySearchController controller = Get.put( HistorySearchController(), tag: Utils.generateRandomString(8), ); - late final gridDelegate = Grid.videoCardHDelegate(context, minHeight: 110); - @override Widget buildList(List list) { return SliverGrid.builder( diff --git a/lib/pages/later_search/view.dart b/lib/pages/later_search/view.dart index a59fe14d4..4492b3cd4 100644 --- a/lib/pages/later_search/view.dart +++ b/lib/pages/later_search/view.dart @@ -20,7 +20,8 @@ class LaterSearchPage extends StatefulWidget { } class _LaterSearchPageState - extends CommonSearchPageState { + extends CommonSearchPageState + with GridMixin { late final enablePlayAll = Pref.enablePlayAll; @override @@ -61,8 +62,6 @@ class _LaterSearchPageState ]; } - late final gridDelegate = Grid.videoCardHDelegate(context, minHeight: 110); - @override Widget buildList(List list) { return SliverGrid.builder( diff --git a/lib/pages/live/view.dart b/lib/pages/live/view.dart index db3733c88..5c81a212d 100644 --- a/lib/pages/live/view.dart +++ b/lib/pages/live/view.dart @@ -38,14 +38,6 @@ class _LivePageState extends State @override bool get wantKeepAlive => true; - late TextScaler textScaler; - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - textScaler = MediaQuery.textScalerOf(context); - } - @override Widget build(BuildContext context) { super.build(context); @@ -89,7 +81,7 @@ class _LivePageState extends State Expanded( child: SizedBox( // 10+14*textScaler - height: 10.0 + textScaler.scale(14), + height: 24, child: Obx(() { final areaIndex = controller.areaIndex.value; return ListView.separated( @@ -174,7 +166,7 @@ class _LivePageState extends State crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth, childAspectRatio: Style.aspectRatio, - mainAxisExtent: textScaler.scale(90), + mainAxisExtent: 90, ); Widget _buildBody(ThemeData theme, LoadingState loadingState) { @@ -191,7 +183,7 @@ class _LivePageState extends State SliverToBoxAdapter( child: SizedBox( // 8+10+13*textScaler - height: 18.0 + textScaler.scale(13), + height: 31, child: Obx(() { final tagIndex = controller.tagIndex.value; return ListView.separated( @@ -305,7 +297,7 @@ class _LivePageState extends State return SliverToBoxAdapter( child: SizedBox( // 3+4+45+6+10+12*textScaler - height: 68.0 + textScaler.scale(12), + height: 80, child: CustomScrollView( scrollDirection: Axis.horizontal, controller: controller.followController, diff --git a/lib/pages/live_area_detail/child/view.dart b/lib/pages/live_area_detail/child/view.dart index 04d84bda6..b1bce3708 100644 --- a/lib/pages/live_area_detail/child/view.dart +++ b/lib/pages/live_area_detail/child/view.dart @@ -72,7 +72,7 @@ class _LiveAreaChildPageState extends State crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth, childAspectRatio: Style.aspectRatio, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(90), + mainAxisExtent: 90, ); Widget _buildBody( diff --git a/lib/pages/live_follow/view.dart b/lib/pages/live_follow/view.dart index a156bb460..a3e3abdcc 100644 --- a/lib/pages/live_follow/view.dart +++ b/lib/pages/live_follow/view.dart @@ -57,7 +57,7 @@ class _LiveFollowPageState extends State { crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth, childAspectRatio: Style.aspectRatio, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(90), + mainAxisExtent: 90, ); Widget _buildBody(LoadingState?> loadingState) { diff --git a/lib/pages/live_search/child/view.dart b/lib/pages/live_search/child/view.dart index 2c4447022..874afa6e0 100644 --- a/lib/pages/live_search/child/view.dart +++ b/lib/pages/live_search/child/view.dart @@ -75,7 +75,7 @@ class _LiveSearchChildPageState extends State crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth, childAspectRatio: Style.aspectRatio, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(60), + mainAxisExtent: 60, ); late final userDelegate = SliverGridDelegateWithMaxCrossAxisExtent( diff --git a/lib/pages/member/widget/user_info_card.dart b/lib/pages/member/widget/user_info_card.dart index 8d0801224..3cd184bb9 100644 --- a/lib/pages/member/widget/user_info_card.dart +++ b/lib/pages/member/widget/user_info_card.dart @@ -779,7 +779,7 @@ class UserInfoCard extends StatelessWidget { children: [ // _buildHeader(context), // const SizedBox(height: kToolbarHeight), - const SizedBox(height: 30), + const SizedBox(height: 45), Row( children: [ const SizedBox(width: 20), diff --git a/lib/pages/member_audio/view.dart b/lib/pages/member_audio/view.dart index 78ce6f192..60cf91cb6 100644 --- a/lib/pages/member_audio/view.dart +++ b/lib/pages/member_audio/view.dart @@ -67,7 +67,6 @@ class _MemberAudioState extends State mainAxisSpacing: 2, maxCrossAxisExtent: Grid.smallCardWidth * 2, childAspectRatio: Style.aspectRatio * 2.6, - minHeight: MediaQuery.textScalerOf(context).scale(90), ); Widget _buildBody( diff --git a/lib/pages/member_coin_arc/view.dart b/lib/pages/member_coin_arc/view.dart index d7ccd5263..93ea98669 100644 --- a/lib/pages/member_coin_arc/view.dart +++ b/lib/pages/member_coin_arc/view.dart @@ -72,7 +72,7 @@ class _MemberCoinArcPageState extends State { crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth, childAspectRatio: Style.aspectRatio, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(75), + mainAxisExtent: 75, ); Widget _buildBody(LoadingState?> loadingState) { diff --git a/lib/pages/member_favorite/view.dart b/lib/pages/member_favorite/view.dart index 599f33eae..41f3ad702 100644 --- a/lib/pages/member_favorite/view.dart +++ b/lib/pages/member_favorite/view.dart @@ -1,4 +1,3 @@ -import 'package:PiliPlus/common/skeleton/video_card_h.dart'; import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart'; import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/common/widgets/sliver/sliver_pinned_header.dart'; @@ -69,11 +68,7 @@ class _MemberFavoriteState extends State return switch (loadingState) { Loading() => SliverPadding( padding: const EdgeInsets.only(top: 7), - sliver: SliverGrid.builder( - gridDelegate: Grid.videoCardHDelegate(context), - itemBuilder: (context, index) => const VideoCardHSkeleton(), - itemCount: 10, - ), + sliver: gridSkeleton, ), Success(:final response) => response != null && response.isNotEmpty @@ -168,18 +163,15 @@ class _MemberFavoriteState extends State itemCount: list.length, itemBuilder: (context, index) { final item = list[index]; - return SizedBox( - height: 98, - child: MemberFavItem( - item: item, - onDelete: (isDeleted) { - if (isDeleted ?? false) { - _controller.favState - ..value.mediaListResponse?.list?.remove(item) - ..refresh(); - } - }, - ), + return MemberFavItem( + item: item, + onDelete: (isDeleted) { + if (isDeleted ?? false) { + _controller.favState + ..value.mediaListResponse?.list?.remove(item) + ..refresh(); + } + }, ); }, ); diff --git a/lib/pages/member_favorite/widget/item.dart b/lib/pages/member_favorite/widget/item.dart index 1c01e1454..e7ad0ce4c 100644 --- a/lib/pages/member_favorite/widget/item.dart +++ b/lib/pages/member_favorite/widget/item.dart @@ -8,7 +8,6 @@ import 'package:PiliPlus/pages/subscription_detail/view.dart'; import 'package:PiliPlus/utils/bili_utils.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; -import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart' hide LayoutBuilder; import 'package:get/get.dart'; @@ -37,10 +36,7 @@ class MemberFavItem extends StatelessWidget { if (item.type == 0 || item.type == 11) { final isDeleted = await Get.toNamed( '/favDetail', - parameters: { - 'mediaId': item.id.toString(), - 'heroTag': Utils.makeHeroTag(item.id), - }, + parameters: {'mediaId': item.id.toString()}, ); onDelete?.call(isDeleted); } else { diff --git a/lib/pages/member_home/view.dart b/lib/pages/member_home/view.dart index d8c6e3acc..1e877dc3f 100644 --- a/lib/pages/member_home/view.dart +++ b/lib/pages/member_home/view.dart @@ -49,14 +49,13 @@ class _MemberHomeState extends State crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth, childAspectRatio: Style.aspectRatio, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(55), + mainAxisExtent: 55, ); late final gridDelegateAudio = SliverGridDelegateWithExtentAndRatio( mainAxisSpacing: 2, maxCrossAxisExtent: Grid.smallCardWidth * 2, childAspectRatio: Style.aspectRatio * 2.6, - minHeight: MediaQuery.textScalerOf(context).scale(90), ); late final gridDelegatePgc = SliverGridDelegateWithExtentAndRatio( @@ -64,7 +63,7 @@ class _MemberHomeState extends State crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth * 0.6, childAspectRatio: 0.75, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(52), + mainAxisExtent: 52, ); Widget _buildBody(LoadingState loadingState) { @@ -114,7 +113,7 @@ class _MemberHomeState extends State ), SliverToBoxAdapter( child: SizedBox( - height: 98, + height: 110, child: MemberFavItem( item: res.favourite2!.item!.first, ), @@ -183,7 +182,7 @@ class _MemberHomeState extends State ), SliverToBoxAdapter( child: SizedBox( - height: 98, + height: 110, child: MemberArticleItem( item: res.article!.item!.first, ), diff --git a/lib/pages/member_home/widgets/fav_item.dart b/lib/pages/member_home/widgets/fav_item.dart index 138ba9540..83500409b 100644 --- a/lib/pages/member_home/widgets/fav_item.dart +++ b/lib/pages/member_home/widgets/fav_item.dart @@ -3,7 +3,6 @@ import 'package:PiliPlus/common/widgets/image/image_save.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models_new/space/space_fav/list.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; -import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -24,10 +23,7 @@ class MemberFavItem extends StatelessWidget { onTap: () { Get.toNamed( '/favDetail', - parameters: { - 'mediaId': item.mediaId.toString(), - 'heroTag': Utils.makeHeroTag(item.mediaId), - }, + parameters: {'mediaId': item.mediaId.toString()}, ); }, onLongPress: onLongPress, @@ -42,8 +38,8 @@ class MemberFavItem extends StatelessWidget { children: [ NetworkImgLayer( src: item.cover, - width: 140.8, - height: 88, + width: 160, + height: 110, ), const SizedBox(width: 10), Expanded( diff --git a/lib/pages/member_like_arc/view.dart b/lib/pages/member_like_arc/view.dart index d5752be6b..ce67045eb 100644 --- a/lib/pages/member_like_arc/view.dart +++ b/lib/pages/member_like_arc/view.dart @@ -74,7 +74,7 @@ class _MemberLikeArcPageState extends State { crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth, childAspectRatio: Style.aspectRatio, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(75), + mainAxisExtent: 75, ); Widget _buildBody(LoadingState?> loadingState) { diff --git a/lib/pages/member_pgc/view.dart b/lib/pages/member_pgc/view.dart index 1280415b7..8bb85438a 100644 --- a/lib/pages/member_pgc/view.dart +++ b/lib/pages/member_pgc/view.dart @@ -71,7 +71,7 @@ class _MemberBangumiState extends State crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth * 0.6, childAspectRatio: 0.75, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(52), + mainAxisExtent: 52, ); Widget _buildBody(LoadingState?> loadingState) { diff --git a/lib/pages/member_upower_rank/view.dart b/lib/pages/member_upower_rank/view.dart index 3b89a34ef..a7b43edb7 100644 --- a/lib/pages/member_upower_rank/view.dart +++ b/lib/pages/member_upower_rank/view.dart @@ -175,7 +175,6 @@ class _UpowerRankPageState extends State ThemeData theme, LoadingState?> loadingState, ) { - late final width = MediaQuery.textScalerOf(context).scale(32); return switch (loadingState) { Loading() => const SliverFillRemaining(child: m3eLoading), Success?>(:final response) => @@ -192,7 +191,7 @@ class _UpowerRankPageState extends State child: ListTile( onTap: () => Get.toNamed('/member?mid=${item.mid}'), leading: SizedBox( - width: width, + width: 32, child: Center( child: Text( (index + 1).toString(), diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index 6ea2a0b4e..8923beead 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -14,7 +14,6 @@ import 'package:PiliPlus/utils/bili_utils.dart'; import 'package:PiliPlus/utils/extension/get_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; -import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart' hide ListTile; import 'package:get/get.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; @@ -485,7 +484,6 @@ class _MediaPageState extends State ); } else { return FavFolderItem( - heroTag: Utils.generateRandomString(8), item: response.list[index], onPop: _autoRefresh, ); diff --git a/lib/pages/mine/widgets/item.dart b/lib/pages/mine/widgets/item.dart index a06a4913c..8fe53fed1 100644 --- a/lib/pages/mine/widgets/item.dart +++ b/lib/pages/mine/widgets/item.dart @@ -9,12 +9,10 @@ class FavFolderItem extends StatelessWidget { super.key, required this.item, required this.onPop, - required this.heroTag, }); final FavFolderInfo item; final VoidCallback onPop; - final String heroTag; @override Widget build(BuildContext context) { @@ -26,7 +24,6 @@ class FavFolderItem extends StatelessWidget { arguments: item, parameters: { 'mediaId': item.id.toString(), - 'heroTag': heroTag, }, )?.whenComplete(onPop); }, @@ -48,13 +45,10 @@ class FavFolderItem extends StatelessWidget { ), ], ), - child: Hero( - tag: heroTag, - child: NetworkImgLayer( - src: item.cover, - width: 180, - height: 110, - ), + child: NetworkImgLayer( + src: item.cover, + width: 180, + height: 110, ), ), const SizedBox(height: 8), diff --git a/lib/pages/pgc/view.dart b/lib/pages/pgc/view.dart index d9bdec055..5c424fe8b 100644 --- a/lib/pages/pgc/view.dart +++ b/lib/pages/pgc/view.dart @@ -66,9 +66,7 @@ class _PgcPageState extends State with AutomaticKeepAliveClientMixin { if (controller.showPgcTimeline) SliverToBoxAdapter( child: SizedBox( - height: - Grid.smallCardWidth / 2 / 0.75 + - MediaQuery.textScalerOf(context).scale(96), + height: Grid.smallCardWidth / 2 / 0.75 + 96, child: Obx( () => _buildTimeline(theme, controller.timelineState.value), ), @@ -305,7 +303,7 @@ class _PgcPageState extends State with AutomaticKeepAliveClientMixin { crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth * 0.6, childAspectRatio: 0.75, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(50), + mainAxisExtent: 50, ); Widget _buildRcmdBody(LoadingState?> loadingState) { @@ -338,9 +336,7 @@ class _PgcPageState extends State with AutomaticKeepAliveClientMixin { children: [ _buildFollowTitle(theme), SizedBox( - height: - Grid.smallCardWidth / 2 / 0.75 + - MediaQuery.textScalerOf(context).scale(50), + height: Grid.smallCardWidth / 2 / 0.75 + 50, child: Obx( () => _buildFollowBody(controller.followState.value), ), diff --git a/lib/pages/pgc_index/view.dart b/lib/pages/pgc_index/view.dart index 4b64e70ab..9e1a972cb 100644 --- a/lib/pages/pgc_index/view.dart +++ b/lib/pages/pgc_index/view.dart @@ -228,7 +228,7 @@ class _PgcIndexPageState extends State crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Grid.smallCardWidth * 0.6, childAspectRatio: 0.75, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(50), + mainAxisExtent: 50, ); Widget _buildList(LoadingState?> loadingState) { diff --git a/lib/pages/rank/zone/view.dart b/lib/pages/rank/zone/view.dart index c714bf244..4238babae 100644 --- a/lib/pages/rank/zone/view.dart +++ b/lib/pages/rank/zone/view.dart @@ -24,7 +24,7 @@ class ZonePage extends StatelessWidget { tag: tag, ); - final gridDelegate = Grid.videoCardHDelegate(context); + final gridDelegate = Grid.videoCardHDelegate(); Widget buildBody(LoadingState?> loadingState) { return switch (loadingState) { diff --git a/lib/pages/rcmd/view.dart b/lib/pages/rcmd/view.dart index 5b8aa7293..816e88dc7 100644 --- a/lib/pages/rcmd/view.dart +++ b/lib/pages/rcmd/view.dart @@ -56,7 +56,7 @@ class _RcmdPageState extends State crossAxisSpacing: Style.cardSpace, maxCrossAxisExtent: Pref.recommendCardWidth, childAspectRatio: Style.aspectRatio, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(90), + mainAxisExtent: 90, ); Widget _buildBody( diff --git a/lib/pages/save_panel/view.dart b/lib/pages/save_panel/view.dart index 9b5eeb7d1..2c0bfa0ff 100644 --- a/lib/pages/save_panel/view.dart +++ b/lib/pages/save_panel/view.dart @@ -337,7 +337,6 @@ class _SavePanelState extends State { final theme = Theme.of(context); final padding = MediaQuery.viewPaddingOf(context); final maxWidth = context.mediaQueryShortestSide; - late final coverSize = MediaQuery.textScalerOf(context).scale(65); return Stack( clipBehavior: .none, alignment: .center, @@ -401,10 +400,10 @@ class _SavePanelState extends State { children: [ NetworkImgLayer( src: cover!, - height: coverSize, + height: 65, width: coverType == .def16_9 - ? coverSize * Style.aspectRatio16x9 - : coverSize, + ? 65 * Style.aspectRatio16x9 + : 65, quality: 100, borderRadius: const .all(.circular(6)), ), diff --git a/lib/pages/search/view.dart b/lib/pages/search/view.dart index d641a81b3..f040dab41 100644 --- a/lib/pages/search/view.dart +++ b/lib/pages/search/view.dart @@ -255,7 +255,6 @@ class _SearchPageState extends State { ); } - late final mainAxisExtent = 16 + MediaQuery.textScalerOf(context).scale(14); Widget get _buildHistory { return Obx( () { @@ -314,7 +313,7 @@ class _SearchPageState extends State { ), ), SliverFixedWrap( - mainAxisExtent: mainAxisExtent, + mainAxisExtent: 30, spacing: 8, runSpacing: 8, delegate: SliverChildBuilderDelegate( diff --git a/lib/pages/search_panel/all/view.dart b/lib/pages/search_panel/all/view.dart index 5e346822d..4201773d3 100644 --- a/lib/pages/search_panel/all/view.dart +++ b/lib/pages/search_panel/all/view.dart @@ -68,9 +68,7 @@ class _SearchAllPanelState child: SearchPgcItem(item: e.first), ) : SizedBox( - height: - Grid.smallCardWidth / 2 / 0.75 + - MediaQuery.textScalerOf(context).scale(60), + height: Grid.smallCardWidth / 2 / 0.75 + 60, child: ListView.builder( padding: const EdgeInsets.only(bottom: 7), physics: const AlwaysScrollableScrollPhysics(), @@ -104,7 +102,7 @@ class _SearchAllPanelState @override Widget get buildLoading => SliverGrid.builder( - gridDelegate: Grid.videoCardHDelegate(context), + gridDelegate: Grid.videoCardHDelegate(), itemBuilder: (context, index) => const VideoCardHSkeleton(), itemCount: 10, ); diff --git a/lib/pages/search_panel/live/view.dart b/lib/pages/search_panel/live/view.dart index 67f5dc973..b846c7aed 100644 --- a/lib/pages/search_panel/live/view.dart +++ b/lib/pages/search_panel/live/view.dart @@ -49,7 +49,7 @@ class _SearchLivePanelState crossAxisSpacing: Style.cardSpace, mainAxisSpacing: Style.cardSpace, childAspectRatio: Style.aspectRatio, - mainAxisExtent: MediaQuery.textScalerOf(context).scale(80), + mainAxisExtent: 80, ); @override diff --git a/lib/pages/search_panel/pgc/view.dart b/lib/pages/search_panel/pgc/view.dart index 154f41098..bfa411cee 100644 --- a/lib/pages/search_panel/pgc/view.dart +++ b/lib/pages/search_panel/pgc/view.dart @@ -70,7 +70,6 @@ class _SearchPgcPanelState mainAxisSpacing: 2, maxCrossAxisExtent: Grid.smallCardWidth * 2, childAspectRatio: Style.aspectRatio * 1.5, - minHeight: MediaQuery.textScalerOf(context).scale(155), ), itemBuilder: (context, index) => const MediaPgcSkeleton(), itemCount: 10, diff --git a/lib/pages/setting/extra_setting.dart b/lib/pages/setting/extra_setting.dart index a817f6bd3..1a861f181 100644 --- a/lib/pages/setting/extra_setting.dart +++ b/lib/pages/setting/extra_setting.dart @@ -18,7 +18,7 @@ class _ExtraSettingState extends State { Widget build(BuildContext context) { final showAppBar = widget.showAppBar; final padding = MediaQuery.viewPaddingOf(context); - return scaffold( + return scaffold_( appBar: showAppBar ? AppBar(title: const Text('其它设置')) : null, body: ListView.builder( padding: EdgeInsets.only( diff --git a/lib/pages/setting/pages/bar_set.dart b/lib/pages/setting/pages/bar_set.dart deleted file mode 100644 index 398812740..000000000 --- a/lib/pages/setting/pages/bar_set.dart +++ /dev/null @@ -1,102 +0,0 @@ -import 'package:PiliPlus/common/widgets/pair.dart'; -import 'package:PiliPlus/common/widgets/reorder_mixin.dart'; -import 'package:PiliPlus/common/widgets/scaffold.dart'; -import 'package:PiliPlus/models/common/enum_with_label.dart'; -import 'package:PiliPlus/utils/storage.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; -import 'package:get/get.dart'; - -class BarSetPage extends StatefulWidget { - const BarSetPage({super.key}); - - @override - State createState() => _BarSetPageState(); -} - -class _BarSetPageState extends State with ReorderMixin { - late final String key; - late final String title; - late final List> list; - - @override - void initState() { - super.initState(); - final Map args = Get.arguments; - key = args['key']; - title = args['title']; - final List? cache = GStorage.setting.get(key); - list = (args['defaultBars'] as List) - .map((e) => Pair(first: e, second: cache?.contains(e.index) ?? true)) - .toList(); - if (cache != null && cache.isNotEmpty) { - final cacheIndex = {for (final (k, v) in cache.indexed) v: k}; - list.sort((a, b) { - final indexA = cacheIndex[a.first.index] ?? cacheIndex.length; - final indexB = cacheIndex[b.first.index] ?? cacheIndex.length; - return indexA.compareTo(indexB); - }); - } - } - - void saveEdit() { - GStorage.setting.put( - key, - list.where((e) => e.second).map((e) => e.first.index).toList(), - ); - SmartDialog.showToast('保存成功,下次启动时生效'); - } - - void onReset() { - Get.back(); - GStorage.setting.delete(key); - SmartDialog.showToast('重置成功,下次启动时生效'); - } - - void onReorder(int oldIndex, int newIndex) { - if (newIndex > oldIndex) newIndex -= 1; - list.insert(newIndex, list.removeAt(oldIndex)); - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return scaffold( - appBar: AppBar( - title: Text('$title编辑'), - actions: [ - TextButton(onPressed: onReset, child: const Text('重置')), - TextButton(onPressed: saveEdit, child: const Text('保存')), - const SizedBox(width: 12), - ], - ), - body: ReorderableListView( - onReorder: onReorder, - proxyDecorator: proxyDecorator, - footer: Padding( - padding: - MediaQuery.viewPaddingOf(context).copyWith(top: 0, left: 0) + - const .only(right: 34, top: 10), - child: const Align( - alignment: Alignment.centerRight, - child: Text('*长按拖动排序'), - ), - ), - children: list - .map( - (e) => CheckboxListTile( - key: ValueKey(e.hashCode), - value: e.second, - onChanged: (bool? value) { - e.second = value!; - setState(() {}); - }, - title: Text(e.first.label), - secondary: const Icon(Icons.drag_indicator_rounded), - ), - ) - .toList(), - ), - ); - } -} diff --git a/lib/pages/setting/play_setting.dart b/lib/pages/setting/play_setting.dart index 27f18fd0d..b3d12df75 100644 --- a/lib/pages/setting/play_setting.dart +++ b/lib/pages/setting/play_setting.dart @@ -18,7 +18,7 @@ class _PlaySettingState extends State { Widget build(BuildContext context) { final showAppBar = widget.showAppBar; final padding = MediaQuery.viewPaddingOf(context); - return scaffold( + return scaffold_( appBar: showAppBar ? AppBar(title: const Text('播放器设置')) : null, body: ListView.builder( padding: EdgeInsets.only( diff --git a/lib/pages/setting/privacy_setting.dart b/lib/pages/setting/privacy_setting.dart index 7646919ed..87c872eb7 100644 --- a/lib/pages/setting/privacy_setting.dart +++ b/lib/pages/setting/privacy_setting.dart @@ -18,7 +18,7 @@ class _PrivacySettingState extends State { Widget build(BuildContext context) { final showAppBar = widget.showAppBar; final padding = MediaQuery.viewPaddingOf(context); - return scaffold( + return scaffold_( appBar: showAppBar ? AppBar(title: const Text('隐私设置')) : null, body: ListView( padding: .only( diff --git a/lib/pages/setting/slide_color_picker.dart b/lib/pages/setting/slide_color_picker.dart index 9893c2e9b..20d4cc911 100644 --- a/lib/pages/setting/slide_color_picker.dart +++ b/lib/pages/setting/slide_color_picker.dart @@ -48,7 +48,7 @@ class _SlideColorPickerState extends State { children: [ const SizedBox(width: 16), SizedBox( - width: MediaQuery.textScalerOf(context).scale(16), + width: 16, child: Text(title), ), const SizedBox(width: 12), @@ -70,7 +70,7 @@ class _SlideColorPickerState extends State { ), const SizedBox(width: 12), SizedBox( - width: MediaQuery.textScalerOf(context).scale(25) + 16, + width: 41, child: Text( value.toString(), textAlign: TextAlign.start, diff --git a/lib/pages/setting/style_setting.dart b/lib/pages/setting/style_setting.dart index ad16a45af..0cc9035e9 100644 --- a/lib/pages/setting/style_setting.dart +++ b/lib/pages/setting/style_setting.dart @@ -18,7 +18,7 @@ class _StyleSettingState extends State { Widget build(BuildContext context) { final showAppBar = widget.showAppBar; final padding = MediaQuery.viewPaddingOf(context); - return scaffold( + return scaffold_( appBar: showAppBar ? AppBar(title: const Text('外观设置')) : null, body: ListView.builder( padding: EdgeInsets.only( diff --git a/lib/pages/setting/video_setting.dart b/lib/pages/setting/video_setting.dart index 309bdbee9..224abee79 100644 --- a/lib/pages/setting/video_setting.dart +++ b/lib/pages/setting/video_setting.dart @@ -18,7 +18,7 @@ class _VideoSettingState extends State { Widget build(BuildContext context) { final showAppBar = widget.showAppBar; final padding = MediaQuery.viewPaddingOf(context); - return scaffold( + return scaffold_( appBar: showAppBar ? AppBar(title: const Text('音视频设置')) : null, body: ListView.builder( padding: EdgeInsets.only( diff --git a/lib/pages/subscription/widgets/item.dart b/lib/pages/subscription/widgets/item.dart index 66bee5feb..c17174df3 100644 --- a/lib/pages/subscription/widgets/item.dart +++ b/lib/pages/subscription/widgets/item.dart @@ -6,7 +6,6 @@ import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models_new/sub/sub/list.dart'; import 'package:PiliPlus/pages/subscription_detail/view.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; -import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart' hide LayoutBuilder; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -22,7 +21,6 @@ class SubItem extends StatelessWidget { @override Widget build(BuildContext context) { - String heroTag = Utils.makeHeroTag(item.id); final type = switch (item.type) { 11 => '收藏夹', 21 => '合集', @@ -45,13 +43,11 @@ class SubItem extends StatelessWidget { '/favDetail', parameters: { 'mediaId': item.id!.toString(), - 'heroTag': heroTag, }, ); } else { SubDetailPage.toSubDetailPage( item.id!, - heroTag: heroTag, subInfo: item, ); } @@ -72,13 +68,10 @@ class SubItem extends StatelessWidget { return Stack( clipBehavior: Clip.none, children: [ - Hero( - tag: heroTag, - child: NetworkImgLayer( - src: item.cover, - width: maxWidth, - height: maxHeight, - ), + NetworkImgLayer( + src: item.cover, + width: maxWidth, + height: maxHeight, ), PBadge( right: 6, diff --git a/lib/pages/subscription_detail/controller.dart b/lib/pages/subscription_detail/controller.dart index b4c15ed09..b36cdd111 100644 --- a/lib/pages/subscription_detail/controller.dart +++ b/lib/pages/subscription_detail/controller.dart @@ -9,7 +9,6 @@ import 'package:get/get.dart'; class SubDetailController extends CommonListController { late int id; - String? heroTag; SubItemModel? subInfo; @override @@ -18,7 +17,6 @@ class SubDetailController final args = Get.arguments; id = args['id']; subInfo = args['subInfo']; - heroTag = args['heroTag']; queryData(); } diff --git a/lib/pages/subscription_detail/view.dart b/lib/pages/subscription_detail/view.dart index 2e76c4df0..b68753f25 100644 --- a/lib/pages/subscription_detail/view.dart +++ b/lib/pages/subscription_detail/view.dart @@ -20,7 +20,6 @@ class SubDetailPage extends StatefulWidget { static void toSubDetailPage( int id, { - String? heroTag, SubItemModel? subInfo, }) { Get.toNamed( @@ -28,7 +27,6 @@ class SubDetailPage extends StatefulWidget { arguments: { 'id': id, 'subInfo': subInfo, - 'heroTag': heroTag, }, ); } @@ -122,17 +120,6 @@ class _SubDetailPageState extends State with GridMixin { fontSize: 12.5, color: theme.colorScheme.outline, ); - Widget cover = NetworkImgLayer( - width: 176, - height: 110, - src: info.cover, - ); - if (_subDetailController.heroTag != null) { - cover = Hero( - tag: _subDetailController.heroTag!, - child: cover, - ); - } return SliverAppBar.medium( expandedHeight: kToolbarHeight + 132, pinned: true, @@ -170,7 +157,11 @@ class _SubDetailPageState extends State with GridMixin { spacing: 12, crossAxisAlignment: CrossAxisAlignment.start, children: [ - cover, + NetworkImgLayer( + width: 176, + height: 110, + src: info.cover, + ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/pages/video/ai_conclusion/view.dart b/lib/pages/video/ai_conclusion/view.dart deleted file mode 100644 index a8850cc4a..000000000 --- a/lib/pages/video/ai_conclusion/view.dart +++ /dev/null @@ -1,180 +0,0 @@ -import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; -import 'package:PiliPlus/common/widgets/selectable_text.dart'; -import 'package:PiliPlus/models_new/video/video_ai_conclusion/model_result.dart'; -import 'package:PiliPlus/pages/common/slide/common_slide_page.dart'; -import 'package:PiliPlus/pages/video/controller.dart'; -import 'package:PiliPlus/utils/duration_utils.dart'; -import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; - -class AiConclusionPanel extends CommonSlidePage { - final AiConclusionResult item; - - const AiConclusionPanel({ - super.key, - required this.item, - }); - - @override - State createState() => _AiDetailState(); -} - -class _AiDetailState extends State - with SingleTickerProviderStateMixin, CommonSlideMixin { - @override - Widget buildPage(ThemeData theme) { - return Material( - color: theme.colorScheme.surface, - child: Column( - children: [ - GestureDetector( - onTap: Get.back, - child: SizedBox( - height: 35, - child: Center( - child: Container( - width: 32, - height: 3, - decoration: BoxDecoration( - color: theme.colorScheme.primary, - borderRadius: const BorderRadius.all(Radius.circular(3)), - ), - ), - ), - ), - ), - Expanded( - child: enableSlide ? slideList(theme) : buildList(theme), - ), - ], - ), - ); - } - - late Key _key; - late bool _isNested; - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - final controller = PrimaryScrollController.of(context); - _isNested = controller is ExtendedNestedScrollController; - _key = ValueKey(controller.hashCode); - } - - @override - Widget buildList(ThemeData theme) { - final child = _buildContent(theme, widget.item); - if (_isNested) { - return ExtendedVisibilityDetector( - uniqueKey: const Key('ai-conclusion'), - child: child, - ); - } - return child; - } - - Widget _buildContent(ThemeData theme, AiConclusionResult res) { - return CustomScrollView( - key: _key, - physics: const AlwaysScrollableScrollPhysics(), - slivers: [ - if (res.summary?.isNotEmpty == true) ...[ - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 14), - child: selectableText( - res.summary!, - style: const TextStyle( - fontSize: 15, - height: 1.5, - ), - ), - ), - ), - if (res.outline?.isNotEmpty == true) - SliverToBoxAdapter( - child: Divider( - height: 20, - color: theme.dividerColor.withValues(alpha: 0.1), - thickness: 6, - ), - ), - ], - if (res.outline?.isNotEmpty == true) - SliverPadding( - padding: EdgeInsets.only( - left: 14, - right: 14, - bottom: MediaQuery.viewPaddingOf(context).bottom + 100, - ), - sliver: SliverList.builder( - itemCount: res.outline!.length, - itemBuilder: (context, index) { - final item = res.outline![index]; - return SelectionArea( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (index != 0) const SizedBox(height: 10), - Text( - item.title!, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold, - height: 1.5, - ), - ), - const SizedBox(height: 6), - ...?item.partOutline?.map( - (item) => Wrap( - children: [ - Text.rich( - TextSpan( - style: TextStyle( - fontSize: 14, - color: theme.colorScheme.onSurface, - height: 1.5, - ), - children: [ - TextSpan( - text: DurationUtils.formatDuration( - item.timestamp, - ), - style: TextStyle( - color: theme.colorScheme.primary, - ), - recognizer: - (NoDeadlineTapGestureRecognizer() - ..onTap = () { - try { - Get.find( - tag: Get.arguments['heroTag'], - ).plPlayerController.seekTo( - Duration( - seconds: item.timestamp!, - ), - isSeek: false, - ); - } catch (_) {} - }), - ), - const TextSpan(text: ' '), - TextSpan(text: item.content!), - ], - ), - ), - ], - ), - ), - ], - ), - ); - }, - ), - ), - ], - ); - } -} diff --git a/lib/pages/video/download_panel/view.dart b/lib/pages/video/download_panel/view.dart index bdd0df513..2f933a304 100644 --- a/lib/pages/video/download_panel/view.dart +++ b/lib/pages/video/download_panel/view.dart @@ -4,7 +4,6 @@ import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/dialog/dialog.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/stat/stat.dart'; -import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/common/stat_type.dart'; import 'package:PiliPlus/models/common/video/video_quality.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart' as pgc; @@ -364,11 +363,11 @@ class _DownloadPanelState extends State { return Padding( padding: const EdgeInsets.only(bottom: 2), child: SizedBox( - height: 98, + height: 110, child: Builder( builder: (context) { return Material( - type: MaterialType.transparency, + type: .transparency, child: InkWell( onTap: () { if (_onDownload( @@ -389,12 +388,12 @@ class _DownloadPanelState extends State { children: [ if (cover?.isNotEmpty == true) Stack( - clipBehavior: Clip.none, + clipBehavior: .none, children: [ NetworkImgLayer( src: cover, - width: 140.8, - height: 88, + width: 160, + height: 110, cacheWidth: cacheWidth, ), if (duration != null && duration > 0) @@ -402,14 +401,14 @@ class _DownloadPanelState extends State { text: DurationUtils.formatDuration(duration), right: 6.0, bottom: 6.0, - type: PBadgeType.gray, + type: .gray, ), if (isCharging == true) const PBadge( text: '充电专属', top: 6, right: 6, - type: PBadgeType.error, + type: .error, ) else if (episode.badge != null) PBadge( @@ -417,9 +416,9 @@ class _DownloadPanelState extends State { top: 6, right: 6, type: switch (episode.badge) { - '预告' => PBadgeType.gray, - '限免' => PBadgeType.free, - _ => PBadgeType.primary, + '预告' => .gray, + '限免' => .free, + _ => .primary, }, ), ], diff --git a/lib/pages/video/introduction/local/controller.dart b/lib/pages/video/introduction/local/controller.dart index c7af976e6..2b106add2 100644 --- a/lib/pages/video/introduction/local/controller.dart +++ b/lib/pages/video/introduction/local/controller.dart @@ -88,7 +88,7 @@ class LocalIntroController extends CommonIntroController { } final index = (-1).obs; - double get _offset => index * 100 + 7 - 35; + double get _offset => index * 112 + 7 - 35; final list = RxList(); @override diff --git a/lib/pages/video/introduction/local/view.dart b/lib/pages/video/introduction/local/view.dart index 0268c0dd2..c867da2f0 100644 --- a/lib/pages/video/introduction/local/view.dart +++ b/lib/pages/video/introduction/local/view.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'package:PiliPlus/common/style.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; -import 'package:PiliPlus/models/common/badge_type.dart'; 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'; @@ -41,7 +40,7 @@ class _LocalIntroPanelState extends State final item = _controller.list[index]; return _buildItem(theme, currIndex == index, index, item); }, - itemExtent: 100, + itemExtent: 112, ); }); } @@ -56,11 +55,11 @@ class _LocalIntroPanelState extends State final cover = File(path.join(entry.entryDirPath, PathUtils.coverName)); final cacheWidth = entry.pageData?.cacheWidth ?? false; return Padding( - padding: const EdgeInsets.only(bottom: 2), + padding: const .only(bottom: 2), child: SizedBox( - height: 98, + height: 110, child: Material( - type: MaterialType.transparency, + type: .transparency, child: InkWell( onTap: () { if (isCurr) { @@ -69,7 +68,7 @@ class _LocalIntroPanelState extends State _controller.playIndex(index, entry: entry); }, child: Padding( - padding: const EdgeInsets.symmetric( + padding: const .symmetric( horizontal: Style.safeSpace, vertical: 5, ), @@ -77,24 +76,24 @@ class _LocalIntroPanelState extends State spacing: 10, children: [ Stack( - clipBehavior: Clip.none, + clipBehavior: .none, children: [ cover.existsSync() ? ClipRRect( borderRadius: Style.mdRadius, child: Image.file( cover, - width: 140.8, - height: 88, + width: 160, + height: 110, fit: BoxFit.cover, - cacheWidth: cacheWidth ? 140.8 : null, - cacheHeight: cacheWidth ? null : 88, + cacheWidth: cacheWidth ? 160 : null, + cacheHeight: cacheWidth ? null : 110, ), ) : NetworkImgLayer( src: entry.cover, - width: 140.8, - height: 88, + width: 160, + height: 110, ), PBadge( text: DurationUtils.formatDuration( @@ -102,14 +101,14 @@ class _LocalIntroPanelState extends State ), right: 6.0, bottom: 6.0, - type: PBadgeType.gray, + type: .gray, ), if (entry.videoQuality case final videoQuality?) PBadge( text: VideoQuality.fromCode(videoQuality).shortDesc, right: 6.0, top: 6.0, - type: PBadgeType.gray, + type: .gray, ), ], ), diff --git a/lib/pages/video/medialist/view.dart b/lib/pages/video/medialist/view.dart index d322d7316..080765050 100644 --- a/lib/pages/video/medialist/view.dart +++ b/lib/pages/video/medialist/view.dart @@ -5,7 +5,6 @@ import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart'; import 'package:PiliPlus/common/widgets/image/image_save.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/stat/stat.dart'; -import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/common/stat_type.dart'; import 'package:PiliPlus/models_new/media_list/media_list.dart'; import 'package:PiliPlus/models_new/video/video_detail/episode.dart'; @@ -131,7 +130,7 @@ class _MediaListPanelState extends State ), sliver: Obx( () => SliverFixedExtentList.builder( - itemExtent: 100, + itemExtent: 112, itemCount: widget.mediaList.length, itemBuilder: (context, index) { if (index == widget.mediaList.length - 1 && @@ -164,11 +163,11 @@ class _MediaListPanelState extends State bvid: item.bvid, ); return Padding( - padding: const EdgeInsets.only(bottom: 2), + padding: const .only(bottom: 2), child: SizedBox( - height: 98, + height: 110, child: Material( - type: MaterialType.transparency, + type: .transparency, child: InkWell( onTap: () { if (item.type != 2) { @@ -181,23 +180,20 @@ class _MediaListPanelState extends State onLongPress: onLongPress, onSecondaryTap: PlatformUtils.isMobile ? null : onLongPress, child: Stack( - clipBehavior: Clip.none, + clipBehavior: .none, children: [ Padding( - padding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 5, - ), + padding: const .symmetric(horizontal: 12, vertical: 5), child: Row( - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: .start, children: [ Stack( - clipBehavior: Clip.none, + clipBehavior: .none, children: [ NetworkImgLayer( src: item.cover, - width: 140.8, - height: 88, + width: 160, + height: 110, ), if (item.badge?.isNotEmpty == true) PBadge( @@ -205,8 +201,8 @@ class _MediaListPanelState extends State right: 6.0, top: 6.0, type: switch (item.badge) { - '充电专属' => PBadgeType.error, - _ => PBadgeType.primary, + '充电专属' => .error, + _ => .primary, }, ), PBadge( @@ -215,7 +211,7 @@ class _MediaListPanelState extends State ), right: 6.0, bottom: 6.0, - type: PBadgeType.gray, + type: .gray, ), ], ), diff --git a/lib/pages/video/member/view.dart b/lib/pages/video/member/view.dart index aacf1664f..7b5712fc8 100644 --- a/lib/pages/video/member/view.dart +++ b/lib/pages/video/member/view.dart @@ -177,7 +177,7 @@ class _HorizontalMemberPageState extends State { Loading() => SliverFixedExtentList.builder( itemCount: 10, itemBuilder: (_, _) => const VideoCardHSkeleton(), - itemExtent: 100, + itemExtent: 112, ), Success(:final response) => response != null && response.isNotEmpty @@ -191,7 +191,7 @@ class _HorizontalMemberPageState extends State { } final videoItem = response[index]; return Padding( - padding: const EdgeInsets.only(bottom: 2), + padding: const .only(bottom: 2), child: VideoCardHMemberVideo( videoItem: videoItem, bvid: _bvid, @@ -209,7 +209,7 @@ class _HorizontalMemberPageState extends State { ); }, itemCount: response.length, - itemExtent: 100, + itemExtent: 112, ), ], ) diff --git a/lib/pages/video/pay_coins/view.dart b/lib/pages/video/pay_coins/view.dart index 7ce95f576..524322618 100644 --- a/lib/pages/video/pay_coins/view.dart +++ b/lib/pages/video/pay_coins/view.dart @@ -199,13 +199,14 @@ class _PayCoinsPageState extends State } Widget _buildCoinWidget(int index, double factor) { + final filter = _getPayFilter(index); + final coinSize = 35 + (factor * 15); return Center( - child: SizedBox( - height: 70 + (factor * 30), - width: 70 + (factor * 30), + child: SizedBox.square( + dimension: 70 + (factor * 30), child: ColorFiltered( colorFilter: ColorFilter.mode( - _getPayFilter(index), + filter, BlendMode.srcATop, ), child: Stack( @@ -221,8 +222,8 @@ class _PayCoinsPageState extends State child: FadeTransition( opacity: _coinFadeAnim, child: Image.asset( - height: 35 + (factor * 15), - width: 35 + (factor * 15), + height: coinSize, + width: coinSize, index == 0 ? Assets.coinsOne : Assets.coinsTwo, ), ), diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 5ecaeae49..416f4092a 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -408,7 +408,7 @@ class _VideoDetailPageVState extends State return Obx( () { final isFullScreen = this.isFullScreen; - return scaffold( + return scaffold_( appBar: removeAppBar(isFullScreen) ? null : PreferredSize( @@ -693,7 +693,7 @@ class _VideoDetailPageVState extends State Widget get childWhenDisabledLandscape => Obx( () { final isFullScreen = this.isFullScreen; - return scaffold( + return scaffold_( appBar: removeAppBar(isFullScreen) ? null : AppBar(backgroundColor: Colors.black, toolbarHeight: 0), @@ -859,7 +859,7 @@ class _VideoDetailPageVState extends State Widget get childWhenDisabledAlmostSquare => Obx(() { final isFullScreen = this.isFullScreen; - return scaffold( + return scaffold_( appBar: removeAppBar(isFullScreen) ? null : AppBar(backgroundColor: Colors.black, toolbarHeight: 0), @@ -1344,7 +1344,7 @@ class _VideoDetailPageVState extends State Positioned( left: 16, bottom: isFullScreen ? max(75, maxHeight * 0.25) : 75, - width: MediaQuery.textScalerOf(context).scale(120), + width: 120, child: AnimatedList( padding: EdgeInsets.zero, key: videoDetailController.listKey, diff --git a/lib/pages/video/view_point/view.dart b/lib/pages/video/view_point/view.dart index 5fdcc5c41..2ce0aaa8e 100644 --- a/lib/pages/video/view_point/view.dart +++ b/lib/pages/video/view_point/view.dart @@ -94,7 +94,7 @@ class _ViewPointsPageState extends State final child = ListView.builder( key: _key, physics: const AlwaysScrollableScrollPhysics(), - padding: EdgeInsets.only( + padding: .only( top: 7, bottom: MediaQuery.viewPaddingOf(context).bottom + 100, ), @@ -125,7 +125,7 @@ class _ViewPointsPageState extends State Widget _buildItem(ThemeData theme, ViewPointSegment segment, bool isCurr) { final theme = Theme.of(context); return Material( - type: MaterialType.transparency, + type: .transparency, child: InkWell( onTap: segment.from != null ? () { @@ -137,29 +137,26 @@ class _ViewPointsPageState extends State } : null, child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: Style.safeSpace, - vertical: 5, - ), + padding: const .symmetric(horizontal: Style.safeSpace, vertical: 5), child: Row( - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: .start, children: [ NetworkImgLayer( src: segment.url, - width: 140.8, - height: 88, + width: 160, + height: 110, ), const SizedBox(width: 10), Expanded( child: Column( spacing: 10, - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: .min, + crossAxisAlignment: .start, children: [ Text( segment.title ?? '', maxLines: 2, - overflow: TextOverflow.ellipsis, + overflow: .ellipsis, style: isCurr ? TextStyle( fontWeight: FontWeight.bold, diff --git a/lib/router/app_pages.dart b/lib/router/app_pages.dart index 226b8413d..9824ed039 100644 --- a/lib/router/app_pages.dart +++ b/lib/router/app_pages.dart @@ -52,7 +52,6 @@ import 'package:PiliPlus/pages/search/view.dart'; import 'package:PiliPlus/pages/search_result/view.dart'; import 'package:PiliPlus/pages/search_trending/view.dart'; import 'package:PiliPlus/pages/setting/extra_setting.dart'; -import 'package:PiliPlus/pages/setting/pages/bar_set.dart'; import 'package:PiliPlus/pages/setting/pages/color_select.dart'; import 'package:PiliPlus/pages/setting/pages/logs.dart'; import 'package:PiliPlus/pages/setting/pages/play_speed_set.dart'; @@ -166,7 +165,6 @@ class Routes { GetPage(name: '/searchTrending', page: () => const SearchTrendingPage()), GetPage(name: '/dynTopic', page: () => const DynTopicPage()), GetPage(name: '/articleList', page: () => const ArticleListPage()), - GetPage(name: '/barSetting', page: () => const BarSetPage()), GetPage(name: '/upowerRank', page: () => const UpowerRankPage()), GetPage(name: '/spaceSetting', page: () => const SpaceSettingPage()), GetPage(name: '/dynTopicRcmd', page: () => const DynTopicRcmdPage()), diff --git a/lib/scripts/patch.ps1 b/lib/scripts/patch.ps1 index 7a91d1ba9..5a75d81cb 100644 --- a/lib/scripts/patch.ps1 +++ b/lib/scripts/patch.ps1 @@ -12,16 +12,10 @@ $NewOverScrollIndicator = "362b1de29974ffc1ed6faa826e1df870d7bec75f"; $BottomSheetAndroidPatch = "lib/scripts/bottom_sheet_android.patch" -# https://github.com/bggRGjQaUbCoE/PiliPlus/issues/1906 -$BottomSheetIOSFlutterPatch = "lib/scripts/bottom_sheet_ios_flutter.patch" -$BottomSheetIOSPiliPlusPatch = "lib/scripts/bottom_sheet_ios_piliplus.patch" - $ScrollViewPatch = "lib/scripts/scroll_view.patch" $TextSelectionPatch = "lib/scripts/text_selection.patch" -$NavigatorPatch = "lib/scripts/navigator.patch" - $NavigationBarPatch = "lib/scripts/navigation_bar.patch" $PaddingPatch = "lib/scripts/padding.patch" @@ -38,13 +32,6 @@ $ModalBarrierPatch = "lib/scripts/modal_barrier.patch" # https://github.com/flutter/flutter/issues/182466 $MouseCursorPatch = "lib/scripts/mouse_cursor.patch" -if ($platform.ToLower() -eq "ios") { - git apply $BottomSheetIOSPiliPlusPatch - if ($LASTEXITCODE -eq 0) { - Write-Host "$BottomSheetIOSPiliPlusPatch applied" - } -} - Set-Location $env:FLUTTER_ROOT $picks = @() @@ -60,7 +47,6 @@ switch ($platform.ToLower()) { } "ios" { $patches += $ScrollViewPatch - $patches += $BottomSheetIOSFlutterPatch } "linux" { $picks += $ToolTipFix diff --git a/lib/utils/app_scheme.dart b/lib/utils/app_scheme.dart index c0364f781..0b52e977a 100644 --- a/lib/utils/app_scheme.dart +++ b/lib/utils/app_scheme.dart @@ -19,7 +19,6 @@ import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/request_utils.dart'; import 'package:PiliPlus/utils/url_utils.dart'; -import 'package:PiliPlus/utils/utils.dart'; import 'package:app_links/app_links.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; @@ -306,10 +305,7 @@ abstract final class PiliScheme { if (mediaId != null) { PageUtils.toDupNamed( '/favDetail', - parameters: { - 'mediaId': mediaId, - 'heroTag': Utils.makeHeroTag(mediaId), - }, + parameters: {'mediaId': mediaId}, off: off, ); return true; @@ -387,10 +383,7 @@ abstract final class PiliScheme { if (mediaId != null) { Get.toNamed( '/favDetail', - parameters: { - 'mediaId': mediaId, - 'heroTag': Utils.makeHeroTag(mediaId), - }, + parameters: {'mediaId': mediaId}, ); return true; } @@ -731,10 +724,7 @@ abstract final class PiliScheme { if (mediaId != null) { PageUtils.toDupNamed( '/favDetail', - parameters: { - 'mediaId': mediaId, - 'heroTag': Utils.makeHeroTag(mediaId), - }, + parameters: {'mediaId': mediaId}, off: off, ); return true; diff --git a/lib/utils/grid.dart b/lib/utils/grid.dart index 30f178afd..80b461463 100644 --- a/lib/utils/grid.dart +++ b/lib/utils/grid.dart @@ -1,13 +1,12 @@ import 'dart:math'; import 'package:PiliPlus/common/skeleton/video_card_h.dart'; -import 'package:PiliPlus/common/style.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; -mixin GridMixin on State { - late final gridDelegate = Grid.videoCardHDelegate(context); +mixin GridMixin { + late final gridDelegate = Grid.videoCardHDelegate(); Widget get gridSkeleton => SliverGrid.builder( gridDelegate: gridDelegate, @@ -19,15 +18,12 @@ mixin GridMixin on State { abstract final class Grid { static final double smallCardWidth = Pref.smallCardWidth; - static SliverGridDelegateWithExtentAndRatio videoCardHDelegate( - BuildContext context, { - double minHeight = 90, - }) => SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: 2, - maxCrossAxisExtent: Grid.smallCardWidth * 2, - childAspectRatio: Style.aspectRatio * 2.2, - minHeight: MediaQuery.textScalerOf(context).scale(minHeight), - ); + static SliverGridDelegateWithMaxCrossAxisExtent videoCardHDelegate() => + SliverGridDelegateWithMaxCrossAxisExtent( + mainAxisSpacing: 2, + mainAxisExtent: 110, + maxCrossAxisExtent: Grid.smallCardWidth * 2, + ); } class SliverGridDelegateWithExtentAndRatio extends SliverGridDelegate { @@ -43,14 +39,10 @@ class SliverGridDelegateWithExtentAndRatio extends SliverGridDelegate { this.crossAxisSpacing = 0.0, this.childAspectRatio = 1.0, this.mainAxisExtent = 0.0, - this.minHeight = 0.0, }) : assert(maxCrossAxisExtent > 0), assert(mainAxisSpacing >= 0), assert(crossAxisSpacing >= 0), - assert(childAspectRatio > 0), - assert(minHeight >= 0); - - final double minHeight; + assert(childAspectRatio > 0); /// The maximum extent of tiles in the cross axis. /// @@ -111,10 +103,8 @@ class SliverGridDelegateWithExtentAndRatio extends SliverGridDelegate { constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1), ); final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount; - final double childMainAxisExtent = max( - minHeight, - childCrossAxisExtent / childAspectRatio + mainAxisExtent, - ); + final double childMainAxisExtent = + childCrossAxisExtent / childAspectRatio + mainAxisExtent; return layoutCache = SliverGridRegularTileLayout( crossAxisCount: crossAxisCount, mainAxisStride: childMainAxisExtent + mainAxisSpacing, diff --git a/lib/utils/page_utils.dart b/lib/utils/page_utils.dart index 0f4cd5d02..19601a626 100644 --- a/lib/utils/page_utils.dart +++ b/lib/utils/page_utils.dart @@ -357,10 +357,7 @@ abstract final class PageUtils { if (url.contains('medialist/detail/ml')) { Get.toNamed( '/favDetail', - parameters: { - 'heroTag': '${medialist.cover}', - 'mediaId': '${medialist.id}', - }, + parameters: {'mediaId': '${medialist.id}'}, ); } else { PiliScheme.routePushFromUrl(url.http2https);