diff --git a/lib/grpc/grpc_repo.dart b/lib/grpc/grpc_repo.dart index 4cefe7f0..fc78a698 100644 --- a/lib/grpc/grpc_repo.dart +++ b/lib/grpc/grpc_repo.dart @@ -193,6 +193,17 @@ class GrpcRepo { }); } + static Future replyInfo({ + required int rpid, + }) async { + return await _request(() async { + final request = ReplyInfoReq()..rpid = Int64(rpid); + final response = await GrpcClient.instance.replyClient + .replyInfo(request, options: options); + return {'status': true, 'data': response.reply}; + }); + } + static Future mainList({ int type = 1, required int oid, diff --git a/lib/pages/video/detail/reply_reply/controller.dart b/lib/pages/video/detail/reply_reply/controller.dart index 51b82b0b..fd5df0b6 100644 --- a/lib/pages/video/detail/reply_reply/controller.dart +++ b/lib/pages/video/detail/reply_reply/controller.dart @@ -1,4 +1,5 @@ import 'package:PiliPalaX/grpc/app/main/community/reply/v1/reply.pb.dart'; +import 'package:PiliPalaX/grpc/grpc_repo.dart'; import 'package:PiliPalaX/http/loading_state.dart'; import 'package:PiliPalaX/pages/common/common_controller.dart'; import 'package:flutter/material.dart'; @@ -42,6 +43,8 @@ class VideoReplyReplyController extends CommonController AnimationController? controller; Animation? colorAnimation; + ReplyInfo? firstFloor; + @override void onInit() { super.onInit(); @@ -77,8 +80,21 @@ class VideoReplyReplyController extends CommonController // } @override - Future queryData([bool isRefresh = true]) { + Future queryData([bool isRefresh = true]) async { if (['没有更多了', '还没有评论'].contains(noMore.value)) return Future.value(); + if (!isDialogue && + currentPage == 1 && + !hasRoot && + firstFloor == null && + rpid != null) { + await GrpcRepo.replyInfo( + rpid: rpid!, + ).then((res) { + if (res['status'] && (res['data']?.mid ?? -1) > 0) { + firstFloor = res['data']; + } + }); + } return super.queryData(isRefresh); } diff --git a/lib/pages/video/detail/reply_reply/view.dart b/lib/pages/video/detail/reply_reply/view.dart index 283c50f8..90842b61 100644 --- a/lib/pages/video/detail/reply_reply/view.dart +++ b/lib/pages/video/detail/reply_reply/view.dart @@ -47,6 +47,9 @@ class _VideoReplyReplyPanelState extends State { late final itemPositionsListener = ItemPositionsListener.create(); late final _key = GlobalKey(); + ReplyInfo? get firstFloor => + widget.firstFloor ?? _videoReplyReplyController.firstFloor; + @override void initState() { super.initState(); @@ -75,7 +78,7 @@ class _VideoReplyReplyPanelState extends State { super.dispose(); } - Widget get _header => widget.firstFloor == null + Widget get _header => firstFloor == null ? _sortWidget : ValueListenableBuilder>( valueListenable: itemPositionsListener.itemPositions, @@ -147,16 +150,16 @@ class _VideoReplyReplyPanelState extends State { return Obx(() => _buildBody( _videoReplyReplyController.loadingState.value, index)); - } else if (widget.firstFloor != null) { + } else if (firstFloor != null) { if (index == 0) { return ReplyItemGrpc( - replyItem: widget.firstFloor!, + replyItem: firstFloor!, replyLevel: '2', showReplyRow: false, replyType: widget.replyType, needDivider: false, onReply: () { - _onReply(widget.firstFloor!); + _onReply(firstFloor!); }, upMid: _videoReplyReplyController.upMid, ); @@ -390,7 +393,7 @@ class _VideoReplyReplyPanelState extends State { return (loadingState is Success ? loadingState.response.length : 0) + 1; } int itemCount = 0; - if (widget.firstFloor != null) { + if (firstFloor != null) { itemCount = 2; } if (loadingState is Success) {