From d63116542b6d5f6b3d4480f357ae2835b5d64f7e Mon Sep 17 00:00:00 2001 From: dom Date: Fri, 8 May 2026 21:26:21 +0800 Subject: [PATCH] tweaks Signed-off-by: dom --- .../gesture/mouse_interactive_viewer.dart | 2 +- .../audio_video_progress_bar.dart | 5 +++-- lib/models/common/reply/reply_sort_type.dart | 7 ++++--- .../common/dyn/common_dyn_controller.dart | 2 +- lib/pages/common/reply_controller.dart | 9 ++++---- lib/pages/fav_search/controller.dart | 21 ++++++++++++++----- lib/pages/later_search/controller.dart | 12 +++++++++-- lib/pages/main_reply/controller.dart | 2 +- lib/pages/mine/controller.dart | 2 +- lib/pages/video/controller.dart | 4 ++-- .../pgc/widgets/intro_detail.dart | 12 +++++------ lib/pages/video/pay_coins/view.dart | 4 ++-- lib/pages/video/reply/controller.dart | 2 +- lib/pages/video/reply_reply/controller.dart | 13 ++---------- lib/pages/video/reply_reply/view.dart | 4 ++-- lib/pages/video/view.dart | 5 +++++ lib/pages/video/widgets/header_control.dart | 2 +- lib/pages/whisper_detail/controller.dart | 16 +++++++++----- 18 files changed, 73 insertions(+), 51 deletions(-) diff --git a/lib/common/widgets/gesture/mouse_interactive_viewer.dart b/lib/common/widgets/gesture/mouse_interactive_viewer.dart index f9c2d2875..bffbeccec 100644 --- a/lib/common/widgets/gesture/mouse_interactive_viewer.dart +++ b/lib/common/widgets/gesture/mouse_interactive_viewer.dart @@ -676,11 +676,11 @@ class _MouseInteractiveViewerState extends State } void _onPointerDown(PointerDownEvent event) { - widget.onPointerDown?.call(event); final localPosition = event.localPosition; if (localPosition.dx < 40 || localPosition.dy < 40) { return; } + widget.onPointerDown?.call(event); _scaleGestureRecognizer.addPointer(event); } diff --git a/lib/common/widgets/progress_bar/audio_video_progress_bar.dart b/lib/common/widgets/progress_bar/audio_video_progress_bar.dart index 665d8fd6f..642bd6deb 100644 --- a/lib/common/widgets/progress_bar/audio_video_progress_bar.dart +++ b/lib/common/widgets/progress_bar/audio_video_progress_bar.dart @@ -744,8 +744,9 @@ class RenderProgressBar extends RenderBox implements MouseTrackerAnnotation { final capRadius = _barHeight / 2; final adjustedWidth = availableSize.width - barHeight; final dx = widthProportion * adjustedWidth + capRadius; - final startPoint = Offset(capRadius, availableSize.height / 2); - final endPoint = Offset(dx, availableSize.height / 2); + final dy = availableSize.height / 2; + final startPoint = Offset(capRadius, dy); + final endPoint = Offset(dx, dy); canvas.drawLine(startPoint, endPoint, baseBarPaint); } diff --git a/lib/models/common/reply/reply_sort_type.dart b/lib/models/common/reply/reply_sort_type.dart index 74c4509a8..6ee4486ce 100644 --- a/lib/models/common/reply/reply_sort_type.dart +++ b/lib/models/common/reply/reply_sort_type.dart @@ -1,10 +1,11 @@ enum ReplySortType { - time('最新评论', '最新'), - hot('最热评论', '最热'), + time('最新评论', '最新', text: '按时间'), + hot('最热评论', '最热', text: '按热度'), select('精选评论', '精选'), ; final String title; final String label; - const ReplySortType(this.title, this.label); + final String? text; + const ReplySortType(this.title, this.label, {this.text}); } diff --git a/lib/pages/common/dyn/common_dyn_controller.dart b/lib/pages/common/dyn/common_dyn_controller.dart index 8aefd2fd2..44f74b9e8 100644 --- a/lib/pages/common/dyn/common_dyn_controller.dart +++ b/lib/pages/common/dyn/common_dyn_controller.dart @@ -20,7 +20,7 @@ abstract class CommonDynController extends ReplyController { Future> customGetData() => ReplyGrpc.mainList( type: replyType, oid: oid, - mode: mode.value, + mode: mode, cursorNext: cursorNext, offset: paginationReply?.nextOffset, ); diff --git a/lib/pages/common/reply_controller.dart b/lib/pages/common/reply_controller.dart index 7b0ad4ba5..d5e8c9241 100644 --- a/lib/pages/common/reply_controller.dart +++ b/lib/pages/common/reply_controller.dart @@ -20,7 +20,7 @@ abstract class ReplyController extends CommonListController { final RxInt count = (-1).obs; late final Rx sortType; - late final Rx mode; + late Mode mode; final savedReplies = ?>{}; @@ -45,8 +45,7 @@ abstract class ReplyController extends CommonListController { super.onInit(); final cacheSortType = Pref.replySortType; sortType = cacheSortType.obs; - mode = - (cacheSortType == .time ? Mode.MAIN_LIST_TIME : Mode.MAIN_LIST_HOT).obs; + mode = cacheSortType == .time ? Mode.MAIN_LIST_TIME : Mode.MAIN_LIST_HOT; } @override @@ -92,11 +91,11 @@ abstract class ReplyController extends CommonListController { switch (sortType.value) { case ReplySortType.time: sortType.value = ReplySortType.hot; - mode.value = Mode.MAIN_LIST_HOT; + mode = Mode.MAIN_LIST_HOT; break; case ReplySortType.hot: sortType.value = ReplySortType.time; - mode.value = Mode.MAIN_LIST_TIME; + mode = Mode.MAIN_LIST_TIME; break; case ReplySortType.select: return; diff --git a/lib/pages/fav_search/controller.dart b/lib/pages/fav_search/controller.dart index d84371f40..b57c601da 100644 --- a/lib/pages/fav_search/controller.dart +++ b/lib/pages/fav_search/controller.dart @@ -16,13 +16,24 @@ class FavSearchController CommonMultiSelectMixin, DeleteItemMixin, BaseFavController { - int type = Get.arguments['type']; + late int type; @override - int mediaId = Get.arguments['mediaId']; + late int mediaId; @override - bool isOwner = Get.arguments['isOwner']; - dynamic count = Get.arguments['count']; - dynamic title = Get.arguments['title']; + late bool isOwner; + late dynamic count; + late dynamic title; + + @override + void onInit() { + final args = Get.arguments; + type = args['type']; + mediaId = args['mediaId']; + isOwner = args['isOwner']; + count = args['count']; + title = args['title']; + super.onInit(); + } final Rx order = FavOrderType.mtime.obs; diff --git a/lib/pages/later_search/controller.dart b/lib/pages/later_search/controller.dart index 7774e9e7a..d3420f404 100644 --- a/lib/pages/later_search/controller.dart +++ b/lib/pages/later_search/controller.dart @@ -13,8 +13,16 @@ class LaterSearchController CommonMultiSelectMixin, DeleteItemMixin, BaseLaterController { - dynamic mid = Get.arguments['mid']; - dynamic count = Get.arguments['count']; + dynamic mid; + dynamic count; + + @override + void onInit() { + final args = Get.arguments; + mid = args['mid']; + count = args['count']; + super.onInit(); + } @override Future> customGetData() => UserHttp.seeYouLater( diff --git a/lib/pages/main_reply/controller.dart b/lib/pages/main_reply/controller.dart index b12ac75ce..679482b26 100644 --- a/lib/pages/main_reply/controller.dart +++ b/lib/pages/main_reply/controller.dart @@ -26,7 +26,7 @@ class MainReplyController extends ReplyController { Future> customGetData() => ReplyGrpc.mainList( type: replyType, oid: oid, - mode: mode.value, + mode: mode, cursorNext: cursorNext, offset: paginationReply?.nextOffset, ); diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index 847895a63..bdd4273cf 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -70,7 +70,7 @@ class MineController extends CommonDataController }, ), ( - size: 22, + size: 21, icon: Icons.watch_later_outlined, title: '稍后再看', onTap: () { diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index 4c6f712b7..47a2392c4 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -288,11 +288,11 @@ class VideoDetailController extends GetxController .toPrecision(2); double minVideoHeightPrecise = minVideoHeight.toPrecision(2); if (currentHeight == minVideoHeightPrecise) { + this.videoHeight = minVideoHeight; if (_needAnimOnDimensionChanged(isVertical)) { isExpanding = true; - this.videoHeight = minVideoHeight; + animationController.forward(from: 1); } - animationController.forward(from: 1); } else if (currentHeight < minVideoHeightPrecise) { // expand if (_needAnimOnDimensionChanged(isVertical)) { diff --git a/lib/pages/video/introduction/pgc/widgets/intro_detail.dart b/lib/pages/video/introduction/pgc/widgets/intro_detail.dart index 514609431..a3beecb1f 100644 --- a/lib/pages/video/introduction/pgc/widgets/intro_detail.dart +++ b/lib/pages/video/introduction/pgc/widgets/intro_detail.dart @@ -147,17 +147,17 @@ class _IntroDetailState extends State ), const SizedBox(height: 4), Row( + spacing: 6, children: [ - Text( - widget.item.areas!.first.name!, - style: smallTitle, - ), - const SizedBox(width: 6), + if (widget.item.areas?.isNotEmpty ?? false) + Text( + widget.item.areas!.first.name!, + style: smallTitle, + ), Text( widget.item.publish!.pubTimeShow!, style: smallTitle, ), - const SizedBox(width: 6), Text( widget.item.newEp!.desc!, style: smallTitle, diff --git a/lib/pages/video/pay_coins/view.dart b/lib/pages/video/pay_coins/view.dart index 69c79a416..0ed9aaeef 100644 --- a/lib/pages/video/pay_coins/view.dart +++ b/lib/pages/video/pay_coins/view.dart @@ -105,8 +105,8 @@ class _PayCoinsPageState extends State return index == 0 ? Assets.mario : Assets.gunSister; } - late final color = Colors.black.withValues(alpha: 0.4); - Color _getPayFilter(int index) => _canPay(index) ? Colors.transparent : color; + Color _getPayFilter(int index) => + _canPay(index) ? Colors.transparent : const Color(0x66000000); @override void initState() { diff --git a/lib/pages/video/reply/controller.dart b/lib/pages/video/reply/controller.dart index be234c4a4..9746848f7 100644 --- a/lib/pages/video/reply/controller.dart +++ b/lib/pages/video/reply/controller.dart @@ -33,7 +33,7 @@ class VideoReplyController extends ReplyController { Future> customGetData() => ReplyGrpc.mainList( oid: isPugv ? videoCtr.epId! : aid, type: videoType.replyType, - mode: mode.value, + mode: mode, cursorNext: cursorNext, offset: paginationReply?.nextOffset, ); diff --git a/lib/pages/video/reply_reply/controller.dart b/lib/pages/video/reply_reply/controller.dart index 026c78c32..e2d7b3b2e 100644 --- a/lib/pages/video/reply_reply/controller.dart +++ b/lib/pages/video/reply_reply/controller.dart @@ -53,7 +53,7 @@ class VideoReplyReplyController extends ReplyController @override void onInit() { super.onInit(); - mode.value = Mode.MAIN_LIST_TIME; + mode = Mode.MAIN_LIST_TIME; queryData(); } @@ -132,19 +132,10 @@ class VideoReplyReplyController extends ReplyController oid: oid, root: rpid, rpid: id ?? 0, - mode: mode.value, + mode: mode, offset: paginationReply?.nextOffset, ); - @override - void queryBySort() { - if (isLoading) return; - mode.value = mode.value == Mode.MAIN_LIST_HOT - ? Mode.MAIN_LIST_TIME - : Mode.MAIN_LIST_HOT; - onReload(); - } - @override Future onReload() { if (loadingState.value.isSuccess) { diff --git a/lib/pages/video/reply_reply/view.dart b/lib/pages/video/reply_reply/view.dart index efa174847..c4825de06 100644 --- a/lib/pages/video/reply_reply/view.dart +++ b/lib/pages/video/reply_reply/view.dart @@ -6,7 +6,7 @@ import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/common/widgets/sliver/sliver_pinned_header.dart'; import 'package:PiliPlus/common/widgets/view_safe_area.dart'; import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart' - show ReplyInfo, Mode; + show ReplyInfo; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/pages/common/slide/common_slide_page.dart'; import 'package:PiliPlus/pages/video/reply/widgets/reply_item_grpc.dart'; @@ -272,7 +272,7 @@ class _VideoReplyReplyPanelState extends State ), label: Obx( () => Text( - _controller.mode.value == Mode.MAIN_LIST_HOT ? '按热度' : '按时间', + _controller.sortType.value.text!, style: TextStyle( fontSize: 13, color: theme.colorScheme.secondary, diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 5b6b5b86a..665aa4f7d 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -200,6 +200,11 @@ class _VideoDetailPageVState extends State } Future? playCallBack() { + if (!isShowing) { + plPlayerController + ?..addStatusLister(playerListener) + ..addPositionListener(positionListener); + } return plPlayerController?.play(); } diff --git a/lib/pages/video/widgets/header_control.dart b/lib/pages/video/widgets/header_control.dart index 4e74d1a2f..a2d6e7dfb 100644 --- a/lib/pages/video/widgets/header_control.dart +++ b/lib/pages/video/widgets/header_control.dart @@ -670,7 +670,7 @@ class HeaderControlState extends State try { final result = await FilePicker.pickFiles( type: .custom, - allowedExtensions: const ['json', 'vtt', 'srt'], + allowedExtensions: const ['json', 'vtt', 'srt', 'ass'], ); if (result != null) { final file = result.files.single; diff --git a/lib/pages/whisper_detail/controller.dart b/lib/pages/whisper_detail/controller.dart index 3422a01a8..fc10a9678 100644 --- a/lib/pages/whisper_detail/controller.dart +++ b/lib/pages/whisper_detail/controller.dart @@ -19,11 +19,11 @@ import 'package:get/get.dart'; class WhisperDetailController extends CommonListController { late final account = Accounts.main; - final int talkerId = Get.arguments['talkerId']; - final String name = Get.arguments['name']; - final String face = Get.arguments['face']; - final int? mid = Get.arguments['mid']; - final bool isLive = Get.arguments['isLive'] ?? false; + late final int talkerId; + late final String name; + late final String face; + late final int? mid; + late final bool isLive; Int64? msgSeqno; @@ -33,6 +33,12 @@ class WhisperDetailController extends CommonListController { @override void onInit() { super.onInit(); + final args = Get.arguments; + talkerId = args['talkerId']; + name = args['name']; + face = args['face']; + mid = args['mid']; + isLive = args['isLive'] ?? false; queryData(); }