fix: 合集切换推荐视频未刷新
This commit is contained in:
@ -18,6 +18,7 @@ import 'package:pilipala/utils/id_utils.dart';
|
|||||||
import 'package:pilipala/utils/storage.dart';
|
import 'package:pilipala/utils/storage.dart';
|
||||||
import 'package:share_plus/share_plus.dart';
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
|
||||||
|
import '../related/index.dart';
|
||||||
import 'widgets/group_panel.dart';
|
import 'widgets/group_panel.dart';
|
||||||
|
|
||||||
class VideoIntroController extends GetxController {
|
class VideoIntroController extends GetxController {
|
||||||
@ -478,11 +479,15 @@ class VideoIntroController extends GetxController {
|
|||||||
// 重新获取视频资源
|
// 重新获取视频资源
|
||||||
final VideoDetailController videoDetailCtr =
|
final VideoDetailController videoDetailCtr =
|
||||||
Get.find<VideoDetailController>(tag: heroTag);
|
Get.find<VideoDetailController>(tag: heroTag);
|
||||||
|
final ReleatedController releatedCtr =
|
||||||
|
Get.find<ReleatedController>(tag: heroTag);
|
||||||
videoDetailCtr.bvid = bvid;
|
videoDetailCtr.bvid = bvid;
|
||||||
videoDetailCtr.oid.value = aid;
|
videoDetailCtr.oid.value = aid;
|
||||||
videoDetailCtr.cid.value = cid;
|
videoDetailCtr.cid.value = cid;
|
||||||
videoDetailCtr.danmakuCid.value = cid;
|
videoDetailCtr.danmakuCid.value = cid;
|
||||||
videoDetailCtr.queryVideoUrl();
|
videoDetailCtr.queryVideoUrl();
|
||||||
|
releatedCtr.bvid = bvid;
|
||||||
|
releatedCtr.queryRelatedVideo();
|
||||||
// 重新请求评论
|
// 重新请求评论
|
||||||
try {
|
try {
|
||||||
/// 未渲染回复组件时可能异常
|
/// 未渲染回复组件时可能异常
|
||||||
|
|||||||
@ -1,14 +1,22 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:pilipala/http/video.dart';
|
import 'package:pilipala/http/video.dart';
|
||||||
|
import '../../../../models/model_hot_video_item.dart';
|
||||||
|
|
||||||
class ReleatedController extends GetxController {
|
class ReleatedController extends GetxController {
|
||||||
// 视频aid
|
// 视频aid
|
||||||
String bvid = Get.parameters['bvid'] ?? "";
|
String bvid = Get.parameters['bvid'] ?? "";
|
||||||
// 推荐视频列表
|
// 推荐视频列表
|
||||||
List relatedVideoList = [];
|
RxList relatedVideoList = <HotVideoItemModel>[].obs;
|
||||||
|
|
||||||
OverlayEntry? popupDialog;
|
OverlayEntry? popupDialog;
|
||||||
|
|
||||||
Future<dynamic> queryRelatedVideo() => VideoHttp.relatedVideoList(bvid: bvid);
|
Future<dynamic> queryRelatedVideo() async {
|
||||||
|
return VideoHttp.relatedVideoList(bvid: bvid).then((value) {
|
||||||
|
if (value['status']) {
|
||||||
|
relatedVideoList.value = value['data'];
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,48 +7,73 @@ import 'package:pilipala/common/widgets/overlay_pop.dart';
|
|||||||
import 'package:pilipala/common/widgets/video_card_h.dart';
|
import 'package:pilipala/common/widgets/video_card_h.dart';
|
||||||
import './controller.dart';
|
import './controller.dart';
|
||||||
|
|
||||||
class RelatedVideoPanel extends StatelessWidget {
|
class RelatedVideoPanel extends StatefulWidget {
|
||||||
final ReleatedController _releatedController =
|
const RelatedVideoPanel({super.key});
|
||||||
Get.put(ReleatedController(), tag: Get.arguments?['heroTag']);
|
|
||||||
RelatedVideoPanel({super.key});
|
@override
|
||||||
|
State<RelatedVideoPanel> createState() => _RelatedVideoPanelState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _RelatedVideoPanelState extends State<RelatedVideoPanel>
|
||||||
|
with AutomaticKeepAliveClientMixin {
|
||||||
|
late ReleatedController _releatedController;
|
||||||
|
late Future _futureBuilder;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get wantKeepAlive => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_releatedController =
|
||||||
|
Get.put(ReleatedController(), tag: Get.arguments?['heroTag']);
|
||||||
|
_futureBuilder = _releatedController.queryRelatedVideo();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
super.build(context);
|
||||||
return FutureBuilder(
|
return FutureBuilder(
|
||||||
future: _releatedController.queryRelatedVideo(),
|
future: _futureBuilder,
|
||||||
builder: (BuildContext context, AsyncSnapshot snapshot) {
|
builder: (BuildContext context, AsyncSnapshot snapshot) {
|
||||||
if (snapshot.connectionState == ConnectionState.done) {
|
if (snapshot.connectionState == ConnectionState.done) {
|
||||||
if (snapshot.data == null) {
|
if (snapshot.data == null) {
|
||||||
return const SliverToBoxAdapter(child: SizedBox());
|
return const SliverToBoxAdapter(child: SizedBox());
|
||||||
}
|
}
|
||||||
if (snapshot.data!['status']) {
|
if (snapshot.data!['status'] && snapshot.data != null) {
|
||||||
|
RxList relatedVideoList = _releatedController.relatedVideoList;
|
||||||
// 请求成功
|
// 请求成功
|
||||||
return SliverList(
|
return Obx(
|
||||||
|
() => SliverList(
|
||||||
delegate: SliverChildBuilderDelegate((context, index) {
|
delegate: SliverChildBuilderDelegate((context, index) {
|
||||||
if (index == snapshot.data['data'].length) {
|
if (index == relatedVideoList.length) {
|
||||||
return SizedBox(height: MediaQuery.of(context).padding.bottom);
|
return SizedBox(
|
||||||
} else {
|
height: MediaQuery.of(context).padding.bottom);
|
||||||
return Material(
|
} else {
|
||||||
child: VideoCardH(
|
return Material(
|
||||||
videoItem: snapshot.data['data'][index],
|
child: VideoCardH(
|
||||||
showPubdate: true,
|
videoItem: relatedVideoList[index],
|
||||||
longPress: () {
|
showPubdate: true,
|
||||||
try {
|
longPress: () {
|
||||||
_releatedController.popupDialog =
|
try {
|
||||||
_createPopupDialog(snapshot.data['data'][index]);
|
_releatedController.popupDialog =
|
||||||
Overlay.of(context)
|
_createPopupDialog(_releatedController
|
||||||
.insert(_releatedController.popupDialog!);
|
.relatedVideoList[index]);
|
||||||
} catch (err) {
|
Overlay.of(context)
|
||||||
return {};
|
.insert(_releatedController.popupDialog!);
|
||||||
}
|
} catch (err) {
|
||||||
},
|
return {};
|
||||||
longPressEnd: () {
|
}
|
||||||
_releatedController.popupDialog?.remove();
|
},
|
||||||
},
|
longPressEnd: () {
|
||||||
),
|
_releatedController.popupDialog?.remove();
|
||||||
);
|
},
|
||||||
}
|
),
|
||||||
}, childCount: snapshot.data['data'].length + 1));
|
);
|
||||||
|
}
|
||||||
|
}, childCount: relatedVideoList.length + 1),
|
||||||
|
),
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
// 请求错误
|
// 请求错误
|
||||||
return HttpError(errMsg: '出错了', fn: () {});
|
return HttpError(errMsg: '出错了', fn: () {});
|
||||||
|
|||||||
Reference in New Issue
Block a user