fix(player): 修复切集返回推荐页黑屏
This commit is contained in:
1 parent
9d2d3b97a1
commit
440188f261
5 files changed
+297
-37
No files matched your search
@@ -4,6 +4,9 @@ import '../models/drama.dart';
|
||||
|
||||
/// A player session has one navigation meaning: browse dramas or browse episodes.
|
||||
class PlaybackQueue {
|
||||
PlaybackQueue.fromEntries(List<PlaybackEntry> entries)
|
||||
: entries = List.unmodifiable(entries);
|
||||
|
||||
PlaybackQueue.home(List<Drama> dramas)
|
||||
: entries = List.unmodifiable(
|
||||
dramas
|
||||
|
||||
@@ -137,6 +137,47 @@ class PlaybackSession extends ChangeNotifier {
|
||||
if (_visible && !_overlayOpen) _warmNeighbors(this);
|
||||
}
|
||||
|
||||
/// 在剧维度和集维度之间切换队列,但保留当前 active controller 与播放状态。
|
||||
void remapQueuePreservingActive(
|
||||
List<Episode> nextEpisodes, {
|
||||
required int currentIndex,
|
||||
int? preloadIndex,
|
||||
int? previousIndex,
|
||||
bool notify = true,
|
||||
}) {
|
||||
if (_closed ||
|
||||
currentIndex < 0 ||
|
||||
currentIndex >= nextEpisodes.length ||
|
||||
_active == null) {
|
||||
return;
|
||||
}
|
||||
_generation++;
|
||||
episodes
|
||||
..clear()
|
||||
..addAll(nextEpisodes);
|
||||
_active!.index = currentIndex;
|
||||
_currentIndex = currentIndex;
|
||||
_selected = true;
|
||||
_loading = false;
|
||||
_error = null;
|
||||
_rememberNeighbors(preloadIndex, previousIndex);
|
||||
final staleNext = _next;
|
||||
final stalePrevious = _previous;
|
||||
final staleHandoff = _handoff;
|
||||
_next = null;
|
||||
_previous = null;
|
||||
_handoff = null;
|
||||
if (notify) _notify();
|
||||
unawaited(
|
||||
_enqueue(() async {
|
||||
await _retire(staleNext);
|
||||
await _retire(stalePrevious);
|
||||
await _retire(staleHandoff);
|
||||
}),
|
||||
);
|
||||
if (_visible && !_overlayOpen) _warmNeighbors(this);
|
||||
}
|
||||
|
||||
void _rememberNeighbors(int? preloadIndex, int? previousIndex) {
|
||||
_nextIndex = preloadIndex;
|
||||
_previousIndex = previousIndex;
|
||||
|
||||
Reference in new issue
Block a user