fix(player): 修复返回首页黑屏并恢复预热
This commit is contained in:
1 parent
6667330ce0
commit
54eb5a60a8
9 files changed
+56
-101
No files matched your search
@@ -2,6 +2,7 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:video_player/video_player.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
@@ -221,30 +222,36 @@ class PlayerLogic extends ChangeNotifier {
|
||||
/// 独立播放页覆盖首页时只暂停并保存进度,首页 session 与 controller 保持存活。
|
||||
Future<void> pauseForFullPlayer() async {
|
||||
if (!_started) return;
|
||||
_logFeedHandoff('pause');
|
||||
cancelScrub();
|
||||
await session.pauseForRouteHandoff();
|
||||
_logFeedHandoff('paused');
|
||||
await saveCurrentProgress();
|
||||
}
|
||||
|
||||
/// 返回首页前把仍存活的 feed controller 定位到第 1 集起点。
|
||||
Future<void> prepareFeedResume() async {
|
||||
if (!_started) return;
|
||||
await session.playbackSettled;
|
||||
final player = session.active;
|
||||
if (player is VideoPlayerPort && player.controller.value.isInitialized) {
|
||||
await player.seekTo(Duration.zero);
|
||||
}
|
||||
}
|
||||
|
||||
/// 独立播放页关闭并恢复首页路由后,等原生播放器实际恢复再结束交接。
|
||||
Future<void> resumeAfterFullPlayer() async {
|
||||
if (!_started) return;
|
||||
_logFeedHandoff('resume');
|
||||
if (visibleIndices.isNotEmpty) {
|
||||
await session.resumeForRouteHandoff();
|
||||
} else {
|
||||
session.setRouteVisible(false);
|
||||
await session.playbackSettled;
|
||||
}
|
||||
_logFeedHandoff('resumed');
|
||||
}
|
||||
|
||||
void _logFeedHandoff(String phase) {
|
||||
if (!kDebugMode) return;
|
||||
final player = session.active;
|
||||
final video = player is VideoPlayerPort ? player : null;
|
||||
debugPrint(
|
||||
'[feed-session] phase=$phase session=${identityHashCode(session)} '
|
||||
'index=${session.currentIndex} episode=${session.currentEpisode.id} '
|
||||
'controller=${video == null ? '-' : identityHashCode(video.controller)} '
|
||||
'live=${session.livePlayerCount}',
|
||||
);
|
||||
}
|
||||
|
||||
/// 串行替换首页 feed 队列;频道变化时重置到第 1 个,刷新时尽量保留当前剧。
|
||||
@@ -283,7 +290,6 @@ class PlayerLogic extends ChangeNotifier {
|
||||
activate: activatePlayer,
|
||||
coordinator: coordinator,
|
||||
waitForFrame: _waitForFrame,
|
||||
warmNeighborsEnabled: !homeMode,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1230,7 +1236,6 @@ class PlayerLogic extends ChangeNotifier {
|
||||
),
|
||||
);
|
||||
if (!isMounted()) return;
|
||||
await prepareFeedResume();
|
||||
await resumeAfterFullPlayer();
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user