From 5664447e15c827f35ed7cac68b5450d15392798a Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Thu, 26 Dec 2024 11:27:49 +0800 Subject: [PATCH] mod: try-catch itemscrollctr jump Signed-off-by: bggRGjQaUbCoE --- lib/common/widgets/list_sheet.dart | 59 ++++++++++--------- lib/common/widgets/watch_later_list.dart | 4 +- lib/pages/bangumi/widgets/bangumi_panel.dart | 2 - .../video/detail/reply_reply/controller.dart | 10 ++-- 4 files changed, 40 insertions(+), 35 deletions(-) diff --git a/lib/common/widgets/list_sheet.dart b/lib/common/widgets/list_sheet.dart index 9d37638b..978eb37e 100644 --- a/lib/common/widgets/list_sheet.dart +++ b/lib/common/widgets/list_sheet.dart @@ -43,7 +43,7 @@ class ListSheetContent extends StatefulWidget { class _ListSheetContentState extends State with TickerProviderStateMixin { late List itemScrollController = []; - int? currentIndex; + late int currentIndex = _currentIndex; late List reverse; int get _index => widget.index ?? 0; @@ -85,7 +85,6 @@ class _ListSheetContentState extends State reverse = _isList ? List.generate(widget.season.sections.length, (_) => false) : [false]; - currentIndex = _currentIndex; if (widget.bvid != null && widget.season != null) { _favStream ??= StreamController(); () async { @@ -97,9 +96,9 @@ class _ListSheetContentState extends State }(); } WidgetsBinding.instance.addPostFrameCallback((_) { - if (currentIndex != null) { - itemScrollController[_index].jumpTo(index: currentIndex!); - } + try { + itemScrollController[_index].jumpTo(index: currentIndex); + } catch (_) {} }); } @@ -279,32 +278,36 @@ class _ListSheetContentState extends State tooltip: '跳至顶部', icon: Icons.vertical_align_top, onPressed: () { - itemScrollController[_ctr?.index ?? 0].scrollTo( - index: !reverse[_ctr?.index ?? 0] - ? 0 - : _isList - ? widget.season.sections[_ctr?.index].episodes - .length - - 1 - : widget.episodes.length - 1, - duration: const Duration(milliseconds: 200), - ); + try { + itemScrollController[_ctr?.index ?? 0].scrollTo( + index: !reverse[_ctr?.index ?? 0] + ? 0 + : _isList + ? widget.season.sections[_ctr?.index].episodes + .length - + 1 + : widget.episodes.length - 1, + duration: const Duration(milliseconds: 200), + ); + } catch (_) {} }, ), _mediumButton( tooltip: '跳至底部', icon: Icons.vertical_align_bottom, onPressed: () { - itemScrollController[_ctr?.index ?? 0].scrollTo( - index: !reverse[_ctr?.index ?? 0] - ? _isList - ? widget.season.sections[_ctr?.index].episodes - .length - - 1 - : widget.episodes.length - 1 - : 0, - duration: const Duration(milliseconds: 200), - ); + try { + itemScrollController[_ctr?.index ?? 0].scrollTo( + index: !reverse[_ctr?.index ?? 0] + ? _isList + ? widget.season.sections[_ctr?.index].episodes + .length - + 1 + : widget.episodes.length - 1 + : 0, + duration: const Duration(milliseconds: 200), + ); + } catch (_) {} }, ), _mediumButton( @@ -315,12 +318,12 @@ class _ListSheetContentState extends State _ctr?.animateTo(_index); await Future.delayed(const Duration(milliseconds: 225)); } - if (currentIndex != null) { + try { itemScrollController[_ctr?.index ?? 0].scrollTo( - index: currentIndex!, + index: currentIndex, duration: const Duration(milliseconds: 200), ); - } + } catch (_) {} }, ), const Spacer(), diff --git a/lib/common/widgets/watch_later_list.dart b/lib/common/widgets/watch_later_list.dart index d7ffa091..892e368f 100644 --- a/lib/common/widgets/watch_later_list.dart +++ b/lib/common/widgets/watch_later_list.dart @@ -42,7 +42,9 @@ class _MediaListPanelState extends State { int index = widget.mediaList.indexWhere((item) => item.bvid == widget.bvid); if (index != -1 && index != 0) { - _scrollController.jumpTo(index: index); + try { + _scrollController.jumpTo(index: index); + } catch (_) {} } }); } diff --git a/lib/pages/bangumi/widgets/bangumi_panel.dart b/lib/pages/bangumi/widgets/bangumi_panel.dart index 94ab65e4..5dfc7b94 100644 --- a/lib/pages/bangumi/widgets/bangumi_panel.dart +++ b/lib/pages/bangumi/widgets/bangumi_panel.dart @@ -8,7 +8,6 @@ import 'package:hive/hive.dart'; import 'package:PiliPalaX/models/bangumi/info.dart'; import 'package:PiliPalaX/pages/video/detail/index.dart'; import 'package:PiliPalaX/utils/storage.dart'; -import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; class BangumiPanel extends StatefulWidget { const BangumiPanel({ @@ -42,7 +41,6 @@ class _BangumiPanelState extends State { int vipStatus = 0; late int cid; late final VideoDetailController videoDetailCtr; - final ItemScrollController itemScrollController = ItemScrollController(); StreamSubscription? _listener; @override diff --git a/lib/pages/video/detail/reply_reply/controller.dart b/lib/pages/video/detail/reply_reply/controller.dart index 88cef769..ee84db77 100644 --- a/lib/pages/video/detail/reply_reply/controller.dart +++ b/lib/pages/video/detail/reply_reply/controller.dart @@ -97,10 +97,12 @@ class VideoReplyReplyController extends CommonController ).animate(controller!); WidgetsBinding.instance.addPostFrameCallback((_) async { if (index != null) { - itemScrollCtr.jumpTo( - index: hasRoot ? index! + 3 : index! + 1, - alignment: 0.25, - ); + try { + itemScrollCtr.jumpTo( + index: hasRoot ? index! + 3 : index! + 1, + alignment: 0.25, + ); + } catch (_) {} await Future.delayed(const Duration(milliseconds: 800)); await controller?.forward(); index = null;