fix(player): 优化上下滑切集黑屏

This commit is contained in:
Zhou Weidong committed 2026-10-26 13:15:56 +08:00
1 parent b83b5799e3
commit 222bacdeeb
10 files changed
+625 -122

No files matched your search

+47 -4
View File
@@ -91,20 +91,63 @@ void main() {
expect(session.preloadedIndex, 1);
final loadingStates = <bool>[];
session.addListener(() => loadingStates.add(session.loading));
await session.select(1, preloadIndex: 2);
await session.select(1, preloadIndex: 2, previousIndex: 0);
await session.preloadSettled;
expect(session.active, same(warm));
expect(warm.initializeCalls, 1);
expect(warm.playCalls, 1);
expect(loadingStates, isNot(contains(true)));
expect(activated, ['ep-0', 'ep-1']);
expect(factory.peakLive, 2);
expect(session.preparedPlayerAt(0), isNotNull);
expect(session.preparedPlayerAt(2), isNotNull);
expect(factory.peakLive, lessThanOrEqualTo(3));
expect(factory.peakPlaying, 1);
await session.close();
expect(factory.live, 0);
},
);
test('should_prepare_previous_neighbor_when_selected', () async {
final factory = _Factory();
final session = PlaybackSession(
episodes: episodes,
factory: factory.create,
canPlay: (_) => true,
);
await session.select(1, preloadIndex: 2, previousIndex: 0);
await session.preloadSettled;
expect(session.preparedPlayerAt(0), isNotNull);
expect(session.preparedPlayerAt(2), isNotNull);
expect(factory.players.map((player) => player.id).toSet(), {
'ep-0',
'ep-1',
'ep-2',
});
expect(factory.peakLive, 3);
await session.close();
});
test('should_warm_previous_without_waiting_for_slow_next', () async {
final nextGate = Completer<void>();
final factory = _Factory(gates: {'ep-2': nextGate});
final session = PlaybackSession(
episodes: episodes,
factory: factory.create,
canPlay: (_) => true,
);
await session.select(1, preloadIndex: 2, previousIndex: 0);
await _tick();
expect(session.preparedPlayerAt(0), isNotNull);
expect(session.preparedPlayerAt(2), isNull);
nextGate.complete();
await session.preloadSettled;
expect(session.preparedPlayerAt(2), isNotNull);
await session.close();
});
test('should_reuse_in_flight_preload_when_swiped_before_ready', () async {
final gate = Completer<void>();
final factory = _Factory(gates: {'ep-1': gate});
@@ -124,7 +167,7 @@ void main() {
await session.preloadSettled;
expect(session.active, same(warm));
expect(warm.initializeCalls, 1);
expect(factory.peakLive, lessThanOrEqualTo(2));
expect(factory.peakLive, lessThanOrEqualTo(3));
expect(factory.peakPlaying, 1);
await session.close();
});
@@ -149,7 +192,7 @@ void main() {
expect(session.preloadedIndex, 2);
expect(stale.playCalls, 0);
expect(stale.disposed, isTrue);
expect(factory.peakLive, lessThanOrEqualTo(2));
expect(factory.peakLive, lessThanOrEqualTo(3));
expect(factory.peakPlaying, 1);
await session.close();
});