opt: 切换页面时销毁播放器组件提升性能

This commit is contained in:
orz12
2024-01-22 12:03:17 +08:00
parent e052c6eafe
commit 569184a507

View File

@ -61,6 +61,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
final Floating floating = Floating(); final Floating floating = Floating();
// 生命周期监听 // 生命周期监听
late final AppLifecycleListener _lifecycleListener; late final AppLifecycleListener _lifecycleListener;
bool isShowing = true;
@override @override
void initState() { void initState() {
@ -216,15 +217,15 @@ class _VideoDetailPageState extends State<VideoDetailPage>
videoIntroController.isPaused = true; videoIntroController.isPaused = true;
plPlayerController!.removeStatusLister(playerListener); plPlayerController!.removeStatusLister(playerListener);
plPlayerController!.pause(); plPlayerController!.pause();
plPlayerController!.danmakuController?.pause();
plPlayerController!.danmakuController?.clear();
} }
setState(() => isShowing = false);
super.didPushNext(); super.didPushNext();
} }
@override @override
// 返回当前页面时 // 返回当前页面时
void didPopNext() async { void didPopNext() async {
setState(() => isShowing = true);
videoDetailController.isFirstTime = false; videoDetailController.isFirstTime = false;
final bool autoplay = autoPlayEnable; final bool autoplay = autoPlayEnable;
videoDetailController.playerInit(autoplay: autoplay); videoDetailController.playerInit(autoplay: autoplay);
@ -354,6 +355,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
boxConstraints.maxHeight; boxConstraints.maxHeight;
return Stack( return Stack(
children: <Widget>[ children: <Widget>[
if (isShowing)
FutureBuilder( FutureBuilder(
future: _futureBuilderFuture, future: _futureBuilderFuture,
builder: (BuildContext context, builder: (BuildContext context,
@ -363,7 +365,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
return Obx( return Obx(
() => !videoDetailController () => !videoDetailController
.autoPlay.value .autoPlay.value
? const SizedBox() ? nil
: PLVideoPlayer( : PLVideoPlayer(
controller: controller:
plPlayerController!, plPlayerController!,