diff --git a/lib/pages/episode_panel/view.dart b/lib/pages/episode_panel/view.dart index 629e26d2c..2c7b39436 100644 --- a/lib/pages/episode_panel/view.dart +++ b/lib/pages/episode_panel/view.dart @@ -257,7 +257,7 @@ class _EpisodePanelState extends CommonCollapseSlidePageState { return _buildBody(theme, 0, _getCurrEpisodes); } - Widget _buildBody(ThemeData theme, int tabIndex, episodes) { + Widget _buildBody(ThemeData theme, int tabIndex, List episodes) { final isCurrTab = tabIndex == widget.initialTabIndex; return KeepAliveWrapper( builder: (context) => ScrollablePositionedList.separated( @@ -269,7 +269,7 @@ class _EpisodePanelState extends CommonCollapseSlidePageState { itemCount: episodes.length, physics: const AlwaysScrollableScrollPhysics(), itemBuilder: (BuildContext context, int itemIndex) { - final episode = episodes[itemIndex]; + final ugc.BaseEpisodeItem episode = episodes[itemIndex]; final isCurrItem = isCurrTab ? itemIndex == _currentItemIndex : false; Widget episodeItem = _buildEpisodeItem( theme: theme, @@ -278,9 +278,9 @@ class _EpisodePanelState extends CommonCollapseSlidePageState { length: episodes.length, isCurrentIndex: isCurrItem, ); - if (widget.type == EpisodeType.season && + if (episode is ugc.EpisodeItem && widget.showTitle && - episode.pages.length > 1) { + episode.pages!.length > 1) { return Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -296,7 +296,7 @@ class _EpisodePanelState extends CommonCollapseSlidePageState { cover: episode.arc?.pic, heroTag: widget.heroTag, ugcIntroController: widget.ugcIntroController!, - bvid: IdUtils.av2bv(episode.aid), + bvid: episode.bvid ?? IdUtils.av2bv(episode.aid!), ), ), ], diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index dcd7cb0b1..92cb1bb83 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -14,6 +14,7 @@ import 'package:PiliPlus/main.dart'; import 'package:PiliPlus/models/common/episode_panel_type.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart'; import 'package:PiliPlus/models_new/video/video_detail/page.dart'; +import 'package:PiliPlus/models_new/video/video_detail/ugc_season.dart'; import 'package:PiliPlus/models_new/video/video_tag/data.dart'; import 'package:PiliPlus/pages/common/common_intro_controller.dart'; import 'package:PiliPlus/pages/danmaku/view.dart'; @@ -1954,11 +1955,7 @@ class _VideoDetailPageVState extends State : pgcIntroController.onChangeEpisode, showTitle: false, isSupportReverse: videoDetailController.isUgc, - onReverse: () => onReversePlay( - bvid: videoDetailController.bvid, - aid: videoDetailController.aid, - isSeason: false, - ), + onReverse: () => onReversePlay(isSeason: false), ), ), ), @@ -2009,11 +2006,7 @@ class _VideoDetailPageVState extends State : pgcIntroController.onChangeEpisode, showTitle: false, isSupportReverse: videoDetailController.isUgc, - onReverse: () => onReversePlay( - bvid: videoDetailController.bvid, - aid: videoDetailController.aid, - isSeason: true, - ), + onReverse: () => onReversePlay(isSeason: true), ), ), ), @@ -2078,7 +2071,15 @@ class _VideoDetailPageVState extends State ); } - void showEpisodes([int? index, season, episodes, bvid, aid, cid]) { + void showEpisodes([ + int? index, + UgcSeason? season, + episodes, + String? bvid, + int? aid, + int? cid, + ]) { + assert((cid == null) == (bvid == null)); final isFullScreen = this.isFullScreen; if (cid == null) { videoDetailController.showMediaListPanel(context); @@ -2097,11 +2098,11 @@ class _VideoDetailPageVState extends State cover: videoDetailController.cover.value, enableSlide: enableSlide, initialTabIndex: index ?? 0, - bvid: bvid, + bvid: bvid!, aid: aid, cid: cid, seasonId: season?.id, - list: season != null ? season.sections : [episodes], + list: season != null ? season.sections! : [episodes], isReversed: !videoDetailController.isUgc ? null : season != null @@ -2119,11 +2120,7 @@ class _VideoDetailPageVState extends State onClose: Get.back, onReverse: () { Get.back(); - onReversePlay( - bvid: bvid, - aid: aid, - isSeason: season != null, - ); + onReversePlay(isSeason: season != null); }, ); if (isFullScreen || videoDetailController.showVideoSheet) { @@ -2146,11 +2143,7 @@ class _VideoDetailPageVState extends State } } - void onReversePlay({ - required dynamic bvid, - required dynamic aid, - required bool isSeason, - }) { + void onReversePlay({required bool isSeason}) { if (isSeason && videoDetailController.isPlayAll) { SmartDialog.showToast('当前为播放全部,合集不支持倒序'); return; diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 8e932c3c2..a63a1a7eb 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -13,6 +13,7 @@ import 'package:PiliPlus/models/common/video/video_quality.dart'; import 'package:PiliPlus/models/video/play/url.dart'; import 'package:PiliPlus/models_new/video/video_detail/episode.dart'; import 'package:PiliPlus/models_new/video/video_detail/section.dart'; +import 'package:PiliPlus/models_new/video/video_detail/ugc_season.dart'; import 'package:PiliPlus/models_new/video/video_shot/data.dart'; import 'package:PiliPlus/pages/common/common_intro_controller.dart'; import 'package:PiliPlus/pages/video/controller.dart'; @@ -83,7 +84,8 @@ class PLVideoPlayer extends StatefulWidget { final Widget? customWidget; final List? customWidgets; - final Function? showEpisodes; + final void Function([int?, UgcSeason?, dynamic, String?, int?, int?])? + showEpisodes; final VoidCallback? showViewPoints; final Color? fill; final Alignment? alignment;