diff --git a/lib/http/api.dart b/lib/http/api.dart index 379540a5..04847cab 100644 --- a/lib/http/api.dart +++ b/lib/http/api.dart @@ -626,4 +626,7 @@ class Api { /// 修复标题和海报 // /api/view?id=${aid} /all/video/av${aid} /video/av${aid}/ static const String fixTitleAndPic = '${HttpString.biliplusBaseUrl}/api/view'; + + /// 专栏详情 + static const String opusDetail = '/x/polymer/web-dynamic/v1/opus/detail'; } diff --git a/lib/http/dynamics.dart b/lib/http/dynamics.dart index 53ba6fc1..74b9b566 100644 --- a/lib/http/dynamics.dart +++ b/lib/http/dynamics.dart @@ -215,4 +215,25 @@ class DynamicsHttp { }; } } + + static Future opusDetail({ + required int opusId, + }) async { + var res = await Request().get( + Api.opusDetail, + data: {'id': opusId}, + ); + if (res.data['code'] == 0) { + return { + 'status': true, + 'data': res.data['data'], + }; + } else { + return { + 'status': false, + 'data': [], + 'msg': res.data['message'], + }; + } + } } diff --git a/lib/pages/dynamics/detail/controller.dart b/lib/pages/dynamics/detail/controller.dart index a5f04bbe..ac68565d 100644 --- a/lib/pages/dynamics/detail/controller.dart +++ b/lib/pages/dynamics/detail/controller.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; -import 'package:pilipala/http/html.dart'; +import 'package:pilipala/http/dynamics.dart'; import 'package:pilipala/http/reply.dart'; import 'package:pilipala/models/common/reply_sort_type.dart'; import 'package:pilipala/models/video/reply/item.dart'; @@ -12,6 +12,7 @@ class DynamicDetailController extends GetxController { DynamicDetailController(this.oid, this.type); int? oid; int? type; + int? opusId; dynamic item; int? floor; String nextOffset = ""; @@ -56,6 +57,12 @@ class DynamicDetailController extends GetxController { if (reqType == 'init') { nextOffset = ''; noMore.value = ''; + if (opusId != null && oid == 0) { + var res = await DynamicsHttp.opusDetail(opusId: opusId!); + if (res['status']) { + oid = int.parse(res['data']['item']['basic']['comment_id_str']); + } + } } var res = await ReplyHttp.replyList( oid: oid!, @@ -110,15 +117,12 @@ class DynamicDetailController extends GetxController { sortTypeTitle.value = _sortType.titles; sortTypeLabel.value = _sortType.labels; replyList.clear(); + noMore.value = ''; + isLoadingMore = false; + isEnd = false; queryReplyList(reqType: 'init'); } - // 根据jumpUrl获取动态html - reqHtmlByOpusId(int id) async { - var res = await HtmlHttp.reqHtml(id, 'opus'); - oid = res['commentId']; - } - // 上拉加载 Future onLoad() async { queryReplyList(reqType: 'onLoad'); diff --git a/lib/pages/dynamics/detail/view.dart b/lib/pages/dynamics/detail/view.dart index 5c8f85e3..cd180fbe 100644 --- a/lib/pages/dynamics/detail/view.dart +++ b/lib/pages/dynamics/detail/view.dart @@ -89,9 +89,8 @@ class _DynamicDetailPageState extends State _dynamicDetailController = Get.put( DynamicDetailController(oid, replyType), tag: opusId.toString()); + _dynamicDetailController.opusId = opusId; _futureBuilderFuture = _dynamicDetailController.queryReplyList(); - await _dynamicDetailController.reqHtmlByOpusId(opusId!); - setState(() {}); } } else { oid = moduleDynamic.major!.draw!.id!; diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index ced55e37..801f1440 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -110,7 +110,8 @@ class _LiveRoomPageState extends State Widget build(BuildContext context) { final mediaQuery = MediaQuery.of(context); final isPortrait = mediaQuery.orientation == Orientation.portrait; - final isLandscape = mediaQuery.orientation == Orientation.landscape; + final RxBool isLandscape = + (mediaQuery.orientation == Orientation.landscape).obs; final padding = mediaQuery.padding; @@ -194,7 +195,7 @@ class _LiveRoomPageState extends State Obx( () => SizedBox( height: padding.top + - (_liveRoomController.isPortrait.value || isLandscape + (_liveRoomController.isPortrait.value || isLandscape.value ? 0 : kToolbarHeight), ), @@ -205,14 +206,14 @@ class _LiveRoomPageState extends State if (plPlayerController.isFullScreen.value == true) { plPlayerController.triggerFullScreen(status: false); } - if (isLandscape) { + if (isLandscape.value) { verticalScreen(); } }, child: Obx( () => Container( width: Get.size.width, - height: isLandscape + height: isLandscape.value ? Get.size.height : !_liveRoomController.isPortrait.value ? Get.size.width * 9 / 16 @@ -313,7 +314,7 @@ class _LiveRoomPageState extends State ), // 消息列表 Visibility( - visible: !isLandscape, + visible: !isLandscape.value, child: Obx( () => Align( alignment: Alignment.bottomCenter, diff --git a/lib/pages/video/detail/reply/controller.dart b/lib/pages/video/detail/reply/controller.dart index 38d59617..9c4855c5 100644 --- a/lib/pages/video/detail/reply/controller.dart +++ b/lib/pages/video/detail/reply/controller.dart @@ -73,7 +73,7 @@ class VideoReplyController extends GetxController { /// 临时修复 final bool flag = replyList .any((ReplyItemModel reply) => reply.rpid == replies.first.rpid); - if (replies.length == 1 && flag) { + if (replies.length == 1 && flag && type == 'onLoad') { replies.clear(); isEnd = true; }