mod: season change error

This commit is contained in:
guozhigq
2024-11-09 17:56:13 +08:00
parent 986ed4f46f
commit f242eec145
3 changed files with 29 additions and 35 deletions

View File

@ -63,6 +63,7 @@ class VideoIntroController extends GetxController {
PersistentBottomSheetController? bottomSheetController; PersistentBottomSheetController? bottomSheetController;
late bool enableRelatedVideo; late bool enableRelatedVideo;
UgcSeason? ugcSeason; UgcSeason? ugcSeason;
RxList<Part> pages = <Part>[].obs;
@override @override
void onInit() { void onInit() {
@ -84,18 +85,20 @@ class VideoIntroController extends GetxController {
} }
// 获取视频简介&分p // 获取视频简介&分p
Future queryVideoIntro() async { Future queryVideoIntro({cover}) async {
var result = await VideoHttp.videoIntro(bvid: bvid); var result = await VideoHttp.videoIntro(bvid: bvid);
if (result['status']) { if (result['status']) {
videoDetail.value = result['data']!; videoDetail.value = result['data']!;
ugcSeason = result['data']!.ugcSeason; ugcSeason = result['data']!.ugcSeason;
if (videoDetail.value.pages!.isNotEmpty && lastPlayCid.value == 0) { pages.value = result['data']!.pages!;
lastPlayCid.value = videoDetail.value.pages!.first.cid!; lastPlayCid.value = videoDetail.value.cid!;
if (pages.isNotEmpty) {
lastPlayCid.value = pages.first.cid!;
} }
final VideoDetailController videoDetailCtr = final VideoDetailController videoDetailCtr =
Get.find<VideoDetailController>(tag: heroTag); Get.find<VideoDetailController>(tag: heroTag);
videoDetailCtr.tabs.value = ['简介', '评论 ${result['data']?.stat?.reply}']; videoDetailCtr.tabs.value = ['简介', '评论 ${result['data']?.stat?.reply}'];
videoDetailCtr.cover.value = result['data'].pic ?? ''; videoDetailCtr.cover.value = cover ?? result['data'].pic ?? '';
// 获取到粉丝数再返回 // 获取到粉丝数再返回
await queryUserStat(); await queryUserStat();
} }
@ -470,8 +473,7 @@ class VideoIntroController extends GetxController {
videoReplyCtr.queryReplyList(type: 'init'); videoReplyCtr.queryReplyList(type: 'init');
} catch (_) {} } catch (_) {}
this.bvid = bvid; this.bvid = bvid;
lastPlayCid.value = cid; await queryVideoIntro(cover: cover);
await queryVideoIntro();
} }
void startTimer() { void startTimer() {
@ -521,9 +523,8 @@ class VideoIntroController extends GetxController {
final List<EpisodeItem> episodesList = sections[i].episodes!; final List<EpisodeItem> episodesList = sections[i].episodes!;
episodes.addAll(episodesList); episodes.addAll(episodesList);
} }
} else if (videoDetail.value.pages != null) { } else if (pages.isNotEmpty) {
isPages = true; isPages = true;
final List<Part> pages = videoDetail.value.pages!;
episodes.addAll(pages); episodes.addAll(pages);
} }
@ -621,10 +622,9 @@ class VideoIntroController extends GetxController {
} }
} }
} }
if (videoDetail.value.pages != null && if (pages.length > 1) {
videoDetail.value.pages!.length > 1) {
dataType = VideoEpidoesType.videoPart; dataType = VideoEpidoesType.videoPart;
episodes = videoDetail.value.pages!; episodes = pages;
} }
DrawerUtils.showRightDialog( DrawerUtils.showRightDialog(

View File

@ -404,27 +404,18 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
Obx( Obx(
() => SeasonPanel( () => SeasonPanel(
ugcSeason: widget.videoDetail!.ugcSeason!, ugcSeason: widget.videoDetail!.ugcSeason!,
cid: videoIntroController.lastPlayCid.value != 0 cid: videoIntroController.lastPlayCid.value,
? videoIntroController.lastPlayCid.value
: widget.videoDetail!.pages!.first.cid,
sheetHeight: videoDetailCtr.sheetHeight.value, sheetHeight: videoDetailCtr.sheetHeight.value,
changeFuc: (bvid, cid, aid, cover) => changeFuc: videoIntroController.changeSeasonOrbangu,
videoIntroController.changeSeasonOrbangu(
bvid,
cid,
aid,
cover,
),
videoIntroCtr: videoIntroController, videoIntroCtr: videoIntroController,
), ),
) )
], ],
// 合集 videoEpisode // 合集 videoEpisode
if (widget.videoDetail!.pages != null && if (videoIntroController.pages.length > 1) ...[
widget.videoDetail!.pages!.length > 1) ...[
Obx( Obx(
() => PagesPanel( () => PagesPanel(
pages: widget.videoDetail!.pages!, pages: videoIntroController.pages,
cid: videoIntroController.lastPlayCid.value, cid: videoIntroController.lastPlayCid.value,
sheetHeight: videoDetailCtr.sheetHeight.value, sheetHeight: videoDetailCtr.sheetHeight.value,
changeFuc: (cid, cover) => changeFuc: (cid, cover) =>

View File

@ -3,7 +3,6 @@ import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:pilipala/models/video_detail_res.dart'; import 'package:pilipala/models/video_detail_res.dart';
import 'package:pilipala/pages/video/detail/index.dart';
import 'package:pilipala/pages/video/detail/introduction/index.dart'; import 'package:pilipala/pages/video/detail/introduction/index.dart';
import '../../../../../common/pages_bottom_sheet.dart'; import '../../../../../common/pages_bottom_sheet.dart';
import '../../../../../models/common/video_episode_type.dart'; import '../../../../../models/common/video_episode_type.dart';
@ -32,25 +31,26 @@ class _PagesPanelState extends State<PagesPanel> {
late int cid; late int cid;
late RxInt currentIndex = (-1).obs; late RxInt currentIndex = (-1).obs;
final String heroTag = Get.arguments['heroTag']; final String heroTag = Get.arguments['heroTag'];
late VideoDetailController _videoDetailController;
final ScrollController listViewScrollCtr = ScrollController(); final ScrollController listViewScrollCtr = ScrollController();
late PersistentBottomSheetController? _bottomSheetController; PersistentBottomSheetController? _bottomSheetController;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
cid = widget.cid; cid = widget.cid;
episodes = widget.pages; episodes = widget.pages;
_videoDetailController = Get.find<VideoDetailController>(tag: heroTag); updateCurrentIndexAndScroll();
currentIndex.value = episodes.indexWhere((Part e) => e.cid == cid); widget.videoIntroCtr.lastPlayCid.listen((int p0) {
scrollToIndex();
_videoDetailController.cid.listen((int p0) {
cid = p0; cid = p0;
currentIndex.value = episodes.indexWhere((Part e) => e.cid == cid); updateCurrentIndexAndScroll();
scrollToIndex();
}); });
} }
void updateCurrentIndexAndScroll() {
currentIndex.value = widget.pages.indexWhere((Part e) => e.cid == cid);
scrollToIndex();
}
@override @override
void dispose() { void dispose() {
listViewScrollCtr.dispose(); listViewScrollCtr.dispose();
@ -60,7 +60,10 @@ class _PagesPanelState extends State<PagesPanel> {
void changeFucCall(item, i) async { void changeFucCall(item, i) async {
widget.changeFuc?.call(item.cid, item.cover); widget.changeFuc?.call(item.cid, item.cover);
currentIndex.value = i; currentIndex.value = i;
cid = item.cid;
if (_bottomSheetController != null) {
_bottomSheetController?.close(); _bottomSheetController?.close();
}
scrollToIndex(); scrollToIndex();
} }
@ -112,7 +115,7 @@ class _PagesPanelState extends State<PagesPanel> {
widget.videoIntroCtr.bottomSheetController = widget.videoIntroCtr.bottomSheetController =
_bottomSheetController = EpisodeBottomSheet( _bottomSheetController = EpisodeBottomSheet(
currentCid: cid, currentCid: cid,
episodes: episodes, episodes: widget.pages,
changeFucCall: changeFucCall, changeFucCall: changeFucCall,
sheetHeight: widget.sheetHeight, sheetHeight: widget.sheetHeight,
dataType: VideoEpidoesType.videoPart, dataType: VideoEpidoesType.videoPart,