loadIndex method
dynamic
loadIndex(
- int target, {
- bool reload = false,
})
Implementation
loadIndex(int target, {bool reload = false}) {
if (!reload) {
if (index.value == target) return;
}
// 播放当前的,暂停其他的
var oldIndex = index.value;
var newIndex = target;
// 暂停之前的视频
if (!(oldIndex == 0 && newIndex == 0)) {
playerOfIndex(oldIndex)?.controller.seekTo(Duration.zero);
// playerOfIndex(oldIndex)?.controller.addListener(_didUpdateValue);
// playerOfIndex(oldIndex)?.showPauseIcon.addListener(_didUpdateValue);
playerOfIndex(oldIndex)?.pause();
print('暂停$oldIndex');
}
// 开始播放当前的视频
playerOfIndex(newIndex)?.controller.addListener(_didUpdateValue);
playerOfIndex(newIndex)?.showPauseIcon.addListener(_didUpdateValue);
playerOfIndex(newIndex)?.play();
print('播放$newIndex');
// 处理预加载/释放内存
for (var i = 0; i < playerList.length; i++) {
// 需要释放[disposeCount]之前的视频
if (i < newIndex - disposeCount || i > newIndex + disposeCount) {
print('释放$i');
playerOfIndex(i)?.controller.removeListener(_didUpdateValue);
playerOfIndex(i)?.showPauseIcon.removeListener(_didUpdateValue);
playerOfIndex(i)?.dispose();
} else {
// 需要预加载
if (i > newIndex && i < newIndex + preloadCount) {
print('预加载$i');
playerOfIndex(i)?.init();
}
}
}
// 快到最底部,添加更多视频
if (playerList.length - newIndex <= loadMoreCount + 1) {
_videoProvider?.call(newIndex, playerList).then(
(list) async {
playerList.addAll(list);
notifyListeners();
},
);
}
// 完成
index.value = target;
}