fix: headerControl bvid丢失

This commit is contained in:
guozhigq
2024-03-01 23:55:19 +08:00
parent b3e162c8d3
commit d6da2a8a47
5 changed files with 33 additions and 12 deletions

View File

@ -128,6 +128,7 @@ class VideoDetailController extends GetxController
controller: plPlayerController, controller: plPlayerController,
videoDetailCtr: this, videoDetailCtr: this,
floating: floating, floating: floating,
bvid: bvid,
); );
// CDN优化 // CDN优化
enableCDN = setting.get(SettingBoxKey.enableCDN, defaultValue: true); enableCDN = setting.get(SettingBoxKey.enableCDN, defaultValue: true);

View File

@ -22,8 +22,9 @@ import '../related/index.dart';
import 'widgets/group_panel.dart'; import 'widgets/group_panel.dart';
class VideoIntroController extends GetxController { class VideoIntroController extends GetxController {
VideoIntroController({required this.bvid});
// 视频bvid // 视频bvid
String bvid = Get.parameters['bvid']!; String bvid;
// 是否预渲染 骨架屏 // 是否预渲染 骨架屏
bool preRender = false; bool preRender = false;

View File

@ -24,7 +24,10 @@ import 'widgets/page.dart';
import 'widgets/season.dart'; import 'widgets/season.dart';
class VideoIntroPanel extends StatefulWidget { class VideoIntroPanel extends StatefulWidget {
const VideoIntroPanel({super.key}); final String bvid;
final String? cid;
const VideoIntroPanel({super.key, required this.bvid, this.cid});
@override @override
State<VideoIntroPanel> createState() => _VideoIntroPanelState(); State<VideoIntroPanel> createState() => _VideoIntroPanelState();
@ -47,7 +50,8 @@ class _VideoIntroPanelState extends State<VideoIntroPanel>
/// fix 全屏时参数丢失 /// fix 全屏时参数丢失
heroTag = Get.arguments['heroTag']; heroTag = Get.arguments['heroTag'];
videoIntroController = Get.put(VideoIntroController(), tag: heroTag); videoIntroController =
Get.put(VideoIntroController(bvid: widget.bvid), tag: heroTag);
_futureBuilderFuture = videoIntroController.queryVideoIntro(); _futureBuilderFuture = videoIntroController.queryVideoIntro();
videoIntroController.videoDetail.listen((value) { videoIntroController.videoDetail.listen((value) {
videoDetail = value; videoDetail = value;
@ -77,6 +81,7 @@ class _VideoIntroPanelState extends State<VideoIntroPanel>
loadingStatus: false, loadingStatus: false,
videoDetail: videoIntroController.videoDetail.value, videoDetail: videoIntroController.videoDetail.value,
heroTag: heroTag, heroTag: heroTag,
bvid: widget.bvid,
), ),
); );
} else { } else {
@ -95,6 +100,7 @@ class _VideoIntroPanelState extends State<VideoIntroPanel>
loadingStatus: true, loadingStatus: true,
videoDetail: videoDetail, videoDetail: videoDetail,
heroTag: heroTag, heroTag: heroTag,
bvid: widget.bvid,
); );
} }
}, },
@ -106,10 +112,15 @@ class VideoInfo extends StatefulWidget {
final bool loadingStatus; final bool loadingStatus;
final VideoDetailData? videoDetail; final VideoDetailData? videoDetail;
final String? heroTag; final String? heroTag;
final String bvid;
const VideoInfo( const VideoInfo({
{Key? key, this.loadingStatus = false, this.videoDetail, this.heroTag}) Key? key,
: super(key: key); this.loadingStatus = false,
this.videoDetail,
this.heroTag,
required this.bvid,
}) : super(key: key);
@override @override
State<VideoInfo> createState() => _VideoInfoState(); State<VideoInfo> createState() => _VideoInfoState();
@ -149,7 +160,8 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
void initState() { void initState() {
super.initState(); super.initState();
heroTag = widget.heroTag!; heroTag = widget.heroTag!;
videoIntroController = Get.put(VideoIntroController(), tag: heroTag); videoIntroController =
Get.put(VideoIntroController(bvid: widget.bvid), tag: heroTag);
videoDetailCtr = Get.find<VideoDetailController>(tag: heroTag); videoDetailCtr = Get.find<VideoDetailController>(tag: heroTag);
videoItem = videoIntroController.videoItem!; videoItem = videoIntroController.videoItem!;
sheetHeight = localCache.get('sheetHeight'); sheetHeight = localCache.get('sheetHeight');

View File

@ -23,7 +23,6 @@ import 'package:pilipala/plugin/pl_player/models/play_repeat.dart';
import 'package:pilipala/services/service_locator.dart'; import 'package:pilipala/services/service_locator.dart';
import 'package:pilipala/utils/storage.dart'; import 'package:pilipala/utils/storage.dart';
import 'package:pilipala/plugin/pl_player/utils/fullscreen.dart';
import '../../../services/shutdown_timer_service.dart'; import '../../../services/shutdown_timer_service.dart';
import 'widgets/header_control.dart'; import 'widgets/header_control.dart';
@ -68,7 +67,9 @@ class _VideoDetailPageState extends State<VideoDetailPage>
super.initState(); super.initState();
heroTag = Get.arguments['heroTag']; heroTag = Get.arguments['heroTag'];
videoDetailController = Get.put(VideoDetailController(), tag: heroTag); videoDetailController = Get.put(VideoDetailController(), tag: heroTag);
videoIntroController = Get.put(VideoIntroController(), tag: heroTag); videoIntroController = Get.put(
VideoIntroController(bvid: Get.parameters['bvid']!),
tag: heroTag);
videoIntroController.videoDetail.listen((value) { videoIntroController.videoDetail.listen((value) {
videoPlayerServiceHandler.onVideoDetailChange( videoPlayerServiceHandler.onVideoDetailChange(
value, videoDetailController.cid.value); value, videoDetailController.cid.value);
@ -227,6 +228,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
plPlayerController!.removeStatusLister(playerListener); plPlayerController!.removeStatusLister(playerListener);
plPlayerController!.pause(); plPlayerController!.pause();
} }
print('🐶🐶');
setState(() => isShowing = false); setState(() => isShowing = false);
super.didPushNext(); super.didPushNext();
} }
@ -550,7 +552,8 @@ class _VideoDetailPageState extends State<VideoDetailPage>
slivers: <Widget>[ slivers: <Widget>[
if (videoDetailController.videoType == if (videoDetailController.videoType ==
SearchType.video) ...[ SearchType.video) ...[
const VideoIntroPanel(), VideoIntroPanel(
bvid: videoDetailController.bvid),
] else if (videoDetailController.videoType == ] else if (videoDetailController.videoType ==
SearchType.media_bangumi) ...[ SearchType.media_bangumi) ...[
Obx(() => BangumiIntroPanel( Obx(() => BangumiIntroPanel(
@ -577,7 +580,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
.withOpacity(0.06), .withOpacity(0.06),
), ),
), ),
RelatedVideoPanel(), const RelatedVideoPanel(),
], ],
); );
}, },
@ -627,6 +630,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
headerControl: HeaderControl( headerControl: HeaderControl(
controller: plPlayerController, controller: plPlayerController,
videoDetailCtr: videoDetailController, videoDetailCtr: videoDetailController,
bvid: videoDetailController.bvid,
), ),
danmuWidget: Obx( danmuWidget: Obx(
() => PlDanmaku( () => PlDanmaku(

View File

@ -27,11 +27,13 @@ class HeaderControl extends StatefulWidget implements PreferredSizeWidget {
this.controller, this.controller,
this.videoDetailCtr, this.videoDetailCtr,
this.floating, this.floating,
this.bvid,
super.key, super.key,
}); });
final PlPlayerController? controller; final PlPlayerController? controller;
final VideoDetailController? videoDetailCtr; final VideoDetailController? videoDetailCtr;
final Floating? floating; final Floating? floating;
final String? bvid;
@override @override
State<HeaderControl> createState() => _HeaderControlState(); State<HeaderControl> createState() => _HeaderControlState();
@ -62,7 +64,8 @@ class _HeaderControlState extends State<HeaderControl> {
speedsList = widget.controller!.speedsList; speedsList = widget.controller!.speedsList;
fullScreenStatusListener(); fullScreenStatusListener();
heroTag = Get.arguments['heroTag']; heroTag = Get.arguments['heroTag'];
videoIntroController = Get.put(VideoIntroController(), tag: heroTag); videoIntroController =
Get.put(VideoIntroController(bvid: widget.bvid!), tag: heroTag);
} }
void fullScreenStatusListener() { void fullScreenStatusListener() {