diff --git a/lib/pages/bangumi/introduction/controller.dart b/lib/pages/bangumi/introduction/controller.dart index 7f622ba7..d6af619e 100644 --- a/lib/pages/bangumi/introduction/controller.dart +++ b/lib/pages/bangumi/introduction/controller.dart @@ -576,38 +576,42 @@ class BangumiIntroController extends CommonController { /// 列表循环或者顺序播放时,自动播放下一个;自动连播时,播放相关视频 bool nextPlay() { - late List episodes; - VideoDetailController videoDetailCtr = - Get.find(tag: Get.arguments['heroTag']); - PlayRepeat playRepeat = videoDetailCtr.plPlayerController.playRepeat; + try { + late List episodes; + VideoDetailController videoDetailCtr = + Get.find(tag: Get.arguments['heroTag']); + PlayRepeat playRepeat = videoDetailCtr.plPlayerController.playRepeat; - if ((loadingState.value as Success).response.episodes != null) { - episodes = (loadingState.value as Success).response.episodes!; - } else { - if (playRepeat == PlayRepeat.autoPlayRelated) { - return playRelated(); - } - } - int currentIndex = - episodes.indexWhere((e) => e.cid == videoDetailCtr.cid.value); - int nextIndex = currentIndex + 1; - // 列表循环 - if (nextIndex >= episodes.length) { - if (playRepeat == PlayRepeat.listCycle) { - nextIndex = 0; - } else if (playRepeat == PlayRepeat.autoPlayRelated) { - return playRelated(); + if ((loadingState.value as Success).response.episodes != null) { + episodes = (loadingState.value as Success).response.episodes!; } else { - return false; + if (playRepeat == PlayRepeat.autoPlayRelated) { + return playRelated(); + } } + int currentIndex = + episodes.indexWhere((e) => e.cid == videoDetailCtr.cid.value); + int nextIndex = currentIndex + 1; + // 列表循环 + if (nextIndex >= episodes.length) { + if (playRepeat == PlayRepeat.listCycle) { + nextIndex = 0; + } else if (playRepeat == PlayRepeat.autoPlayRelated) { + return playRelated(); + } else { + return false; + } + } + int epid = episodes[nextIndex].epId; + int cid = episodes[nextIndex].cid; + String bvid = episodes[nextIndex].bvid; + int aid = episodes[nextIndex].aid; + dynamic cover = episodes[nextIndex].cover; + changeSeasonOrbangu(epid, bvid, cid, aid, cover); + return true; + } catch (_) { + return false; } - int epid = episodes[nextIndex].epId; - int cid = episodes[nextIndex].cid; - String bvid = episodes[nextIndex].bvid; - int aid = episodes[nextIndex].aid; - dynamic cover = episodes[nextIndex].cover; - changeSeasonOrbangu(epid, bvid, cid, aid, cover); - return true; } bool playRelated() { diff --git a/lib/pages/video/detail/introduction/controller.dart b/lib/pages/video/detail/introduction/controller.dart index 76de0fb7..e26d0c14 100644 --- a/lib/pages/video/detail/introduction/controller.dart +++ b/lib/pages/video/detail/introduction/controller.dart @@ -728,71 +728,76 @@ class VideoIntroController extends GetxController /// 列表循环或者顺序播放时,自动播放下一个 bool nextPlay() { - final List episodes = []; - bool isPages = false; - final videoDetailCtr = Get.find(tag: heroTag); + try { + final List episodes = []; + bool isPages = false; + final videoDetailCtr = Get.find(tag: heroTag); - // part -> playall -> season - if ((videoDetail.value.pages?.length ?? 0) > 1) { - isPages = true; - final List pages = videoDetail.value.pages!; - episodes.addAll(pages); - } else if (videoDetailCtr.isPlayAll) { - episodes.addAll(videoDetailCtr.mediaList); - } else if (videoDetail.value.ugcSeason != null) { - final UgcSeason ugcSeason = videoDetail.value.ugcSeason!; - final List sections = ugcSeason.sections!; - for (int i = 0; i < sections.length; i++) { - final List episodesList = sections[i].episodes!; - episodes.addAll(episodesList); + // part -> playall -> season + if ((videoDetail.value.pages?.length ?? 0) > 1) { + isPages = true; + final List pages = videoDetail.value.pages!; + episodes.addAll(pages); + } else if (videoDetailCtr.isPlayAll) { + episodes.addAll(videoDetailCtr.mediaList); + } else if (videoDetail.value.ugcSeason != null) { + final UgcSeason ugcSeason = videoDetail.value.ugcSeason!; + final List sections = ugcSeason.sections!; + for (int i = 0; i < sections.length; i++) { + final List episodesList = sections[i].episodes!; + episodes.addAll(episodesList); + } } - } - final PlayRepeat playRepeat = videoDetailCtr.plPlayerController.playRepeat; + final PlayRepeat playRepeat = + videoDetailCtr.plPlayerController.playRepeat; - if (episodes.isEmpty) { - if (playRepeat == PlayRepeat.autoPlayRelated && - videoDetailCtr.showRelatedVideo) { - return playRelated(); + if (episodes.isEmpty) { + if (playRepeat == PlayRepeat.autoPlayRelated && + videoDetailCtr.showRelatedVideo) { + return playRelated(); + } + return false; } + + final int currentIndex = + episodes.indexWhere((e) => e.cid == videoDetailCtr.cid.value); + int nextIndex = currentIndex + 1; + + if (videoDetailCtr.isPlayAll && currentIndex == episodes.length - 2) { + videoDetailCtr.getMediaList(); + } + + // 列表循环 + if (nextIndex >= episodes.length) { + if (playRepeat == PlayRepeat.listCycle) { + nextIndex = 0; + } else if (playRepeat == PlayRepeat.autoPlayRelated && + videoDetailCtr.showRelatedVideo) { + return playRelated(); + } else { + return false; + } + } + + int cid = episodes[nextIndex].cid!; + + while (cid == -1) { + SmartDialog.showToast('当前视频暂不支持播放,自动跳过'); + nextIndex++; + if (nextIndex >= episodes.length) { + return false; + } + cid = episodes[nextIndex].cid!; + } + + final String rBvid = isPages ? bvid : episodes[nextIndex].bvid; + final int rAid = isPages ? IdUtils.bv2av(bvid) : episodes[nextIndex].aid!; + changeSeasonOrbangu(null, rBvid, cid, rAid, null); + return true; + } catch (_) { return false; } - - final int currentIndex = - episodes.indexWhere((e) => e.cid == videoDetailCtr.cid.value); - int nextIndex = currentIndex + 1; - - if (videoDetailCtr.isPlayAll && currentIndex == episodes.length - 2) { - videoDetailCtr.getMediaList(); - } - - // 列表循环 - if (nextIndex >= episodes.length) { - if (playRepeat == PlayRepeat.listCycle) { - nextIndex = 0; - } else if (playRepeat == PlayRepeat.autoPlayRelated && - videoDetailCtr.showRelatedVideo) { - return playRelated(); - } else { - return false; - } - } - - int cid = episodes[nextIndex].cid!; - - while (cid == -1) { - SmartDialog.showToast('当前视频暂不支持播放,自动跳过'); - nextIndex++; - if (nextIndex >= episodes.length) { - return false; - } - cid = episodes[nextIndex].cid!; - } - - final String rBvid = isPages ? bvid : episodes[nextIndex].bvid; - final int rAid = isPages ? IdUtils.bv2av(bvid) : episodes[nextIndex].aid!; - changeSeasonOrbangu(null, rBvid, cid, rAid, null); - return true; } bool playRelated() {