loadIndex method

dynamic loadIndex(
  1. int target, {
  2. 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;
}