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 showFAB = false;
@override
void onReadEnd() {
history ??=
@@ -114,7 +116,15 @@ class _ComicPageState extends LoadingState<ComicPage, ComicDetails>
ComicDetails get comic => data!;
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) {
setState(() {
showAppbarTitle = true;
@@ -133,7 +143,18 @@ class _ComicPageState extends LoadingState<ComicPage, ComicDetails>
@override
Widget buildContent(BuildContext context, ComicDetails data) {
return SmoothCustomScrollView(
return Scaffold(
floatingActionButton: showFAB
? FloatingActionButton(
onPressed: () {
scrollController.animateTo(0,
duration: const Duration(milliseconds: 200),
curve: Curves.ease);
},
child: const Icon(Icons.arrow_upward),
)
: null,
body: SmoothCustomScrollView(
controller: scrollController,
slivers: [
...buildTitle(),
@@ -144,8 +165,11 @@ class _ComicPageState extends LoadingState<ComicPage, ComicDetails>
buildComments(),
buildThumbnails(),
buildRecommend(),
SliverPadding(padding: EdgeInsets.only(bottom: context.padding.bottom)),
SliverPadding(
padding: EdgeInsets.only(bottom: context.padding.bottom + 80), // Add additional padding for FAB
),
],
),
);
}