mod: try-catch itemscrollctr jump

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-26 11:27:49 +08:00
parent eee7eda1a2
commit 5664447e15
4 changed files with 40 additions and 35 deletions

View File

@@ -43,7 +43,7 @@ class ListSheetContent extends StatefulWidget {
class _ListSheetContentState extends State<ListSheetContent> class _ListSheetContentState extends State<ListSheetContent>
with TickerProviderStateMixin { with TickerProviderStateMixin {
late List<ItemScrollController> itemScrollController = []; late List<ItemScrollController> itemScrollController = [];
int? currentIndex; late int currentIndex = _currentIndex;
late List<bool> reverse; late List<bool> reverse;
int get _index => widget.index ?? 0; int get _index => widget.index ?? 0;
@@ -85,7 +85,6 @@ class _ListSheetContentState extends State<ListSheetContent>
reverse = _isList reverse = _isList
? List.generate(widget.season.sections.length, (_) => false) ? List.generate(widget.season.sections.length, (_) => false)
: [false]; : [false];
currentIndex = _currentIndex;
if (widget.bvid != null && widget.season != null) { if (widget.bvid != null && widget.season != null) {
_favStream ??= StreamController<int>(); _favStream ??= StreamController<int>();
() async { () async {
@@ -97,9 +96,9 @@ class _ListSheetContentState extends State<ListSheetContent>
}(); }();
} }
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
if (currentIndex != null) { try {
itemScrollController[_index].jumpTo(index: currentIndex!); itemScrollController[_index].jumpTo(index: currentIndex);
} } catch (_) {}
}); });
} }
@@ -279,32 +278,36 @@ class _ListSheetContentState extends State<ListSheetContent>
tooltip: '跳至顶部', tooltip: '跳至顶部',
icon: Icons.vertical_align_top, icon: Icons.vertical_align_top,
onPressed: () { onPressed: () {
itemScrollController[_ctr?.index ?? 0].scrollTo( try {
index: !reverse[_ctr?.index ?? 0] itemScrollController[_ctr?.index ?? 0].scrollTo(
? 0 index: !reverse[_ctr?.index ?? 0]
: _isList ? 0
? widget.season.sections[_ctr?.index].episodes : _isList
.length - ? widget.season.sections[_ctr?.index].episodes
1 .length -
: widget.episodes.length - 1, 1
duration: const Duration(milliseconds: 200), : widget.episodes.length - 1,
); duration: const Duration(milliseconds: 200),
);
} catch (_) {}
}, },
), ),
_mediumButton( _mediumButton(
tooltip: '跳至底部', tooltip: '跳至底部',
icon: Icons.vertical_align_bottom, icon: Icons.vertical_align_bottom,
onPressed: () { onPressed: () {
itemScrollController[_ctr?.index ?? 0].scrollTo( try {
index: !reverse[_ctr?.index ?? 0] itemScrollController[_ctr?.index ?? 0].scrollTo(
? _isList index: !reverse[_ctr?.index ?? 0]
? widget.season.sections[_ctr?.index].episodes ? _isList
.length - ? widget.season.sections[_ctr?.index].episodes
1 .length -
: widget.episodes.length - 1 1
: 0, : widget.episodes.length - 1
duration: const Duration(milliseconds: 200), : 0,
); duration: const Duration(milliseconds: 200),
);
} catch (_) {}
}, },
), ),
_mediumButton( _mediumButton(
@@ -315,12 +318,12 @@ class _ListSheetContentState extends State<ListSheetContent>
_ctr?.animateTo(_index); _ctr?.animateTo(_index);
await Future.delayed(const Duration(milliseconds: 225)); await Future.delayed(const Duration(milliseconds: 225));
} }
if (currentIndex != null) { try {
itemScrollController[_ctr?.index ?? 0].scrollTo( itemScrollController[_ctr?.index ?? 0].scrollTo(
index: currentIndex!, index: currentIndex,
duration: const Duration(milliseconds: 200), duration: const Duration(milliseconds: 200),
); );
} } catch (_) {}
}, },
), ),
const Spacer(), const Spacer(),

View File

@@ -42,7 +42,9 @@ class _MediaListPanelState extends State<MediaListPanel> {
int index = int index =
widget.mediaList.indexWhere((item) => item.bvid == widget.bvid); widget.mediaList.indexWhere((item) => item.bvid == widget.bvid);
if (index != -1 && index != 0) { if (index != -1 && index != 0) {
_scrollController.jumpTo(index: index); try {
_scrollController.jumpTo(index: index);
} catch (_) {}
} }
}); });
} }

View File

@@ -8,7 +8,6 @@ import 'package:hive/hive.dart';
import 'package:PiliPalaX/models/bangumi/info.dart'; import 'package:PiliPalaX/models/bangumi/info.dart';
import 'package:PiliPalaX/pages/video/detail/index.dart'; import 'package:PiliPalaX/pages/video/detail/index.dart';
import 'package:PiliPalaX/utils/storage.dart'; import 'package:PiliPalaX/utils/storage.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
class BangumiPanel extends StatefulWidget { class BangumiPanel extends StatefulWidget {
const BangumiPanel({ const BangumiPanel({
@@ -42,7 +41,6 @@ class _BangumiPanelState extends State<BangumiPanel> {
int vipStatus = 0; int vipStatus = 0;
late int cid; late int cid;
late final VideoDetailController videoDetailCtr; late final VideoDetailController videoDetailCtr;
final ItemScrollController itemScrollController = ItemScrollController();
StreamSubscription? _listener; StreamSubscription? _listener;
@override @override

View File

@@ -97,10 +97,12 @@ class VideoReplyReplyController extends CommonController
).animate(controller!); ).animate(controller!);
WidgetsBinding.instance.addPostFrameCallback((_) async { WidgetsBinding.instance.addPostFrameCallback((_) async {
if (index != null) { if (index != null) {
itemScrollCtr.jumpTo( try {
index: hasRoot ? index! + 3 : index! + 1, itemScrollCtr.jumpTo(
alignment: 0.25, index: hasRoot ? index! + 3 : index! + 1,
); alignment: 0.25,
);
} catch (_) {}
await Future.delayed(const Duration(milliseconds: 800)); await Future.delayed(const Duration(milliseconds: 800));
await controller?.forward(); await controller?.forward();
index = null; index = null;