From 6d0e7d747d26f6f06e1fe45e3448ddd47e61d937 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sun, 2 Jun 2024 10:35:17 +0000 Subject: [PATCH] Add refresh support for gallery page --- lib/components/gallery_basic_info.dart | 6 +++++- lib/components/gallery_info.dart | 24 +++++++++++++++++++++--- lib/components/gallery_info_desktop.dart | 5 ++++- lib/components/thumbnail_gridview.dart | 2 +- lib/pages/gallery.dart | 8 +++++++- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/lib/components/gallery_basic_info.dart b/lib/components/gallery_basic_info.dart index 2326fb8..db4753c 100644 --- a/lib/components/gallery_basic_info.dart +++ b/lib/components/gallery_basic_info.dart @@ -28,7 +28,11 @@ class GalleryBasicInfo extends StatelessWidget { child: Container( margin: const EdgeInsets.only(right: 8), child: firstPage != null - ? Thumbnail(firstPage!, fileId: fileId, gid: gMeta.gid) + ? Thumbnail(firstPage!, + fileId: fileId, + gid: gMeta.gid, + key: Key( + "thumbnail${gMeta.gid}-${firstPage!.index}-$fileId")) : Container(), )), Expanded( diff --git a/lib/components/gallery_info.dart b/lib/components/gallery_info.dart index d9dd2a3..0f56c4c 100644 --- a/lib/components/gallery_info.dart +++ b/lib/components/gallery_info.dart @@ -1,8 +1,9 @@ -import '../globals.dart'; +import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import '../api/file.dart'; import '../api/gallery.dart'; +import '../globals.dart'; import 'gallery_basic_info.dart'; import 'gallery_info_desktop.dart'; import 'gallery_info_detail.dart'; @@ -10,9 +11,12 @@ import 'tags.dart'; import 'thumbnail_gridview.dart'; class GalleryInfo extends StatefulWidget { - const GalleryInfo(this.gData, {super.key, this.files}); + const GalleryInfo(this.gData, + {super.key, this.files, this.refreshIndicatorKey, this.onRefresh}); final GalleryData gData; final EhFiles? files; + final GlobalKey? refreshIndicatorKey; + final Future Function()? onRefresh; @override State createState() => _GalleryInfo(); @@ -57,7 +61,7 @@ class _GalleryInfo extends State with ThemeModeWidget { final int? firstFileId = widget.files != null && firstPage != null ? widget.files!.files[firstPage!.token]!.firstOrNull?.id : null; - return CustomScrollView( + final v = CustomScrollView( controller: controller, slivers: [ SliverAppBar( @@ -112,6 +116,20 @@ class _GalleryInfo extends State with ThemeModeWidget { gid: widget.gData.meta.gid), ], ); + if (widget.refreshIndicatorKey != null && widget.onRefresh != null) { + return RefreshIndicator( + key: widget.refreshIndicatorKey, + onRefresh: widget.onRefresh!, + child: ScrollConfiguration( + behavior: ScrollConfiguration.of(context).copyWith( + dragDevices: { + PointerDeviceKind.touch, + PointerDeviceKind.mouse, + }, + ), + child: v)); + } + return v; } @override diff --git a/lib/components/gallery_info_desktop.dart b/lib/components/gallery_info_desktop.dart index 9a61be4..aee3b94 100644 --- a/lib/components/gallery_info_desktop.dart +++ b/lib/components/gallery_info_desktop.dart @@ -63,7 +63,10 @@ class GalleryInfoDesktop extends StatelessWidget { padding: const EdgeInsets.only(right: 8.0), child: gData.pages.isNotEmpty ? Thumbnail(gData.pages.first, - fileId: fileId, gid: gData.meta.gid) + key: Key( + "thumbnail${gData.meta.gid}-${gData.pages.first.index}-$fileId"), + fileId: fileId, + gid: gData.meta.gid) : Container())), Expanded( flex: 7, diff --git a/lib/components/thumbnail_gridview.dart b/lib/components/thumbnail_gridview.dart index 8dc643c..cc6954c 100644 --- a/lib/components/thumbnail_gridview.dart +++ b/lib/components/thumbnail_gridview.dart @@ -24,7 +24,7 @@ class ThumbnailGridView extends StatelessWidget { final page = npages[index]!; final fileId = files != null ? files!.files[page.token]!.firstOrNull?.id : null; - final key = Key("thumbnail$gid-${page.index}"); + final key = Key("thumbnail$gid-${page.index}-$fileId"); return Container( padding: const EdgeInsets.all(4), child: Thumbnail(page, diff --git a/lib/pages/gallery.dart b/lib/pages/gallery.dart index ad80c78..36cd0f4 100644 --- a/lib/pages/gallery.dart +++ b/lib/pages/gallery.dart @@ -36,6 +36,8 @@ class GalleryPage extends StatefulWidget { class _GalleryPage extends State with ThemeModeWidget, IsTopWidget2 { _GalleryPage(); + final GlobalKey _refreshIndicatorKey = + GlobalKey(); int _gid = 0; GalleryData? _data; EhFiles? _files; @@ -136,7 +138,11 @@ class _GalleryPage extends State body: isLoading ? const Center(child: CircularProgressIndicator()) : _data != null - ? GalleryInfo(_data!, files: _files) + ? GalleryInfo(_data!, + files: _files, refreshIndicatorKey: _refreshIndicatorKey, + onRefresh: () async { + await _fetchData(); + }) : Center( child: Text("Error: $_error"), ));