Added a 'Back to Top' button. Close #276

This commit is contained in:
2025-03-23 17:11:23 +08:00
parent cd3f09efae
commit 2b1684b0fc

View File

@@ -75,6 +75,8 @@ class _ComicPageState extends LoadingState<ComicPage, ComicDetails>
bool isDownloaded = false; bool isDownloaded = false;
bool showFAB = false;
@override @override
void onReadEnd() { void onReadEnd() {
history ??= history ??=
@@ -114,7 +116,15 @@ class _ComicPageState extends LoadingState<ComicPage, ComicDetails>
ComicDetails get comic => data!; ComicDetails get comic => data!;
void onScroll() { void onScroll() {
if (scrollController.offset > 100) { var offset = scrollController.position.pixels -
scrollController.position.minScrollExtent;
var showFAB = offset > 0;
if (showFAB != this.showFAB) {
setState(() {
this.showFAB = showFAB;
});
}
if (offset > 100) {
if (!showAppbarTitle) { if (!showAppbarTitle) {
setState(() { setState(() {
showAppbarTitle = true; showAppbarTitle = true;
@@ -133,19 +143,33 @@ class _ComicPageState extends LoadingState<ComicPage, ComicDetails>
@override @override
Widget buildContent(BuildContext context, ComicDetails data) { Widget buildContent(BuildContext context, ComicDetails data) {
return SmoothCustomScrollView( return Scaffold(
controller: scrollController, floatingActionButton: showFAB
slivers: [ ? FloatingActionButton(
...buildTitle(), onPressed: () {
buildActions(), scrollController.animateTo(0,
buildDescription(), duration: const Duration(milliseconds: 200),
buildInfo(), curve: Curves.ease);
buildChapters(), },
buildComments(), child: const Icon(Icons.arrow_upward),
buildThumbnails(), )
buildRecommend(), : null,
SliverPadding(padding: EdgeInsets.only(bottom: context.padding.bottom)), body: SmoothCustomScrollView(
], controller: scrollController,
slivers: [
...buildTitle(),
buildActions(),
buildDescription(),
buildInfo(),
buildChapters(),
buildComments(),
buildThumbnails(),
buildRecommend(),
SliverPadding(
padding: EdgeInsets.only(bottom: context.padding.bottom + 80), // Add additional padding for FAB
),
],
),
); );
} }