fix(player): 观看全集复用抓帧首屏

This commit is contained in:
Zhou Weidong committed 2026-10-26 17:20:24 +08:00
1 parent 4d3d067f77
commit 55fc2796a9
4 files changed
+136 -36

No files matched your search

+46
View File
@@ -246,6 +246,34 @@ void main() {
expect(find.byKey(const Key('home-tabs-bar')), findsOneWidget);
});
testWidgets('should_capture_feed_frame_when_opening_series_from_picker', (
tester,
) async {
final factory = _RouteVideoFactory();
await _pumpApp(tester, playerFactory: factory.create);
await tester.tap(find.byKey(const Key('tab-recommend')));
await tester.pumpAndSettle();
await tester.tap(find.byKey(const Key('rail-episodes')));
await tester.pumpAndSettle();
await tester.tap(find.byKey(const Key('player-episode-2')));
await _waitForRevealedPlayerEntry(tester);
await tester.pumpAndSettle();
final player = find.byWidgetPredicate(
(widget) => widget is PlayerPage && widget.revealAfterFirstFrame,
);
expect(player, findsOneWidget);
final playerWidget = tester.widget<PlayerPage>(player);
expect(playerWidget.initialFrameBytes, isNotNull);
expect(playerWidget.revealAfterFirstFrame, isTrue);
expect(playerWidget.initialIndex, 1);
await tester.tap(find.byKey(const Key('player-back')));
await tester.pumpAndSettle();
expect(find.byKey(const Key('recommend-page')), findsOneWidget);
});
testWidgets('should_keep_drama_and_episode_indices_separate', (tester) async {
final factory = _RouteVideoFactory();
await _pumpApp(tester, playerFactory: factory.create);
@@ -1675,6 +1703,24 @@ Future<void> _waitForFullPlayerEntry(WidgetTester tester) async {
fail('full player route was not pushed after frame capture');
}
Future<void> _waitForRevealedPlayerEntry(WidgetTester tester) async {
for (var attempt = 0; attempt < 120; attempt++) {
await tester.runAsync(
() => Future<void>.delayed(const Duration(milliseconds: 10)),
);
await tester.pump(const Duration(milliseconds: 16));
if (find
.byWidgetPredicate(
(widget) => widget is PlayerPage && widget.revealAfterFirstFrame,
)
.evaluate()
.isNotEmpty) {
return;
}
}
fail('revealed player route was not pushed after frame capture');
}
class _RouteVideoFactory {
final List<_RouteVideoPlayer> created = [];
final List<Episode> episodes = [];