fix(player): 修复返回首页黑屏并恢复预热

This commit is contained in:
Zhou Weidong committed 2026-10-26 16:45:00 +08:00
1 parent 6667330ce0
commit 54eb5a60a8
9 files changed
+56 -101

No files matched your search

+21 -3
View File
@@ -109,14 +109,24 @@ void main() {
final recommendPlayer = find.byKey(const Key('recommend-feed-player'));
final sourceState = tester.state(recommendPlayer);
final sourceLogic = _pageLogic(tester, recommendPlayer);
await sourceLogic.session.preloadSettled;
await tester.pumpAndSettle();
final sourceIndex = sourceLogic.session.currentIndex;
final sourceDramaId = sourceLogic.currentDramaId;
final sourceEpisodeId = sourceLogic.session.currentEpisode.id;
final feedPlayer = sourceLogic.session.active! as _RouteVideoPlayer;
final feedPlayCalls = feedPlayer.playCalls;
final feedPositionBefore = feedPlayer.controller.value.position;
final sourceLiveBefore = sourceLogic.session.livePlayerCount;
final sourceCurrentSurface = find.descendant(
of: recommendPlayer,
matching: find.byKey(const ValueKey('player-render-slot-current')),
);
final sourceSurfaceState = tester.state(sourceCurrentSurface);
final sourceSurfaceElement = tester.element(sourceCurrentSurface);
expect(sourceDramaId, 'vengeance-demo');
expect(sourceIndex, 2);
expect(sourceLogic.session.livePlayerCount, 1);
expect(sourceLiveBefore, greaterThan(1));
await tester.tap(find.byKey(const Key('home-feed-full-series')));
await tester.pumpAndSettle();
@@ -124,6 +134,8 @@ void main() {
final fullPlayer = find.byType(PlayerPage);
final fullLogic = _pageLogic(tester, fullPlayer);
expect(fullLogic.session, isNot(same(sourceLogic.session)));
final fullPlayerPort = fullLogic.session.active! as VideoPlayerPort;
expect(fullPlayerPort.controller, isNot(same(feedPlayer.controller)));
expect(feedPlayer.disposed, isFalse);
expect(feedPlayer.playing, isFalse);
@@ -150,6 +162,8 @@ void main() {
final requestsBeforeReturn = playback.requests.length;
await tester.tap(find.byKey(const Key('player-back')));
await tester.pumpAndSettle();
await sourceLogic.session.preloadSettled;
await tester.pumpAndSettle();
final currentSurface = find.descendant(
of: recommendPlayer,
@@ -170,11 +184,15 @@ void main() {
expect(sourceLogic.session.loading, isFalse);
expect(sourceLogic.session.activeSlotActivated, isTrue);
expect(sourceLogic.session.activeSlotPlaying, isTrue);
expect(feedPlayer.seekCalls, 1);
expect(feedPlayer.seekCalls, 0);
expect(feedPlayer.playCalls, greaterThan(feedPlayCalls));
expect(playback.requests.length, requestsBeforeReturn);
expect(feedPlayer.controller.value.position, Duration.zero);
expect(feedPlayer.controller.value.position, feedPositionBefore);
expect(feedPlayer.playing, isTrue);
expect(sourceLogic.session.livePlayerCount, sourceLiveBefore);
expect(sourceLogic.session.livePlayerCount, greaterThan(1));
expect(tester.state(currentSurface), same(sourceSurfaceState));
expect(tester.element(currentSurface), same(sourceSurfaceElement));
expect(
find.descendant(
of: currentSurface,