mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
mod: try-catch itemscrollctr jump
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -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(),
|
||||||
|
|||||||
@@ -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 (_) {}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user