This commit is contained in:
2024-11-30 21:36:23 +08:00
committed by nyne
parent a868fe3fff
commit f8b8811aaa
4 changed files with 85 additions and 11 deletions

View File

@@ -829,6 +829,7 @@ class ComicList extends StatefulWidget {
this.trailingSliver,
this.errorLeading,
this.menuBuilder,
this.controller,
});
final Future<Res<List<Comic>>> Function(int page)? loadPage;
@@ -843,6 +844,8 @@ class ComicList extends StatefulWidget {
final List<MenuEntry> Function(Comic)? menuBuilder;
final ScrollController? controller;
@override
State<ComicList> createState() => ComicListState();
}
@@ -1064,6 +1067,7 @@ class ComicListState extends State<ComicList> {
);
}
return SmoothCustomScrollView(
controller: widget.controller,
slivers: [
if (widget.leadingSliver != null) widget.leadingSliver!,
if (_maxPage != 1) _buildSliverPageSelector(),

View File

@@ -47,10 +47,16 @@ class NaviPane extends StatefulWidget {
final GlobalKey<NavigatorState> navigatorKey;
@override
State<NaviPane> createState() => _NaviPaneState();
State<NaviPane> createState() => NaviPaneState();
static NaviPaneState of(BuildContext context) {
return context.findAncestorStateOfType<NaviPaneState>()!;
}
}
class _NaviPaneState extends State<NaviPane>
typedef NaviItemTapListener = void Function(int);
class NaviPaneState extends State<NaviPane>
with SingleTickerProviderStateMixin {
late int _currentPage = widget.initialPage;
@@ -66,6 +72,16 @@ class _NaviPaneState extends State<NaviPane>
late AnimationController controller;
final _naviItemTapListeners = <NaviItemTapListener>[];
void addNaviItemTapListener(NaviItemTapListener listener) {
_naviItemTapListeners.add(listener);
}
void removeNaviItemTapListener(NaviItemTapListener listener) {
_naviItemTapListeners.remove(listener);
}
static const _kBottomBarHeight = 58.0;
static const _kFoldedSideBarWidth = 80.0;
@@ -85,9 +101,15 @@ class _NaviPaneState extends State<NaviPane>
}
void updatePage(int index) {
for (var listener in _naviItemTapListeners) {
listener(index);
}
if (widget.observer.routes.length > 1) {
widget.navigatorKey.currentState!.popUntil((route) => route.isFirst);
}
if (currentPage == index) {
return;
}
setState(() {
currentPage = index;
});
@@ -670,14 +692,14 @@ class _NaviPopScope extends StatelessWidget {
class _NaviMainView extends StatefulWidget {
const _NaviMainView({required this.state});
final _NaviPaneState state;
final NaviPaneState state;
@override
State<_NaviMainView> createState() => _NaviMainViewState();
}
class _NaviMainViewState extends State<_NaviMainView> {
_NaviPaneState get state => widget.state;
NaviPaneState get state => widget.state;
@override
void initState() {