mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-15 02:05:58 -07:00
chore: Photoviewer now uses auto routing (#432)
Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
parent
092836328f
commit
7628321e47
9 changed files with 201 additions and 141 deletions
|
|
@ -1,12 +1,14 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:auto_route/auto_route.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import 'package:fladder/models/item_base_model.dart';
|
||||
import 'package:fladder/models/items/photos_model.dart';
|
||||
import 'package:fladder/providers/items/folder_details_provider.dart';
|
||||
import 'package:fladder/screens/photo_viewer/photo_viewer_screen.dart';
|
||||
import 'package:fladder/routes/auto_router.gr.dart';
|
||||
import 'package:fladder/screens/shared/media/poster_grid.dart';
|
||||
import 'package:fladder/widgets/shared/pull_to_refresh.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:page_transition/page_transition.dart';
|
||||
|
||||
class FolderDetailScreen extends ConsumerWidget {
|
||||
final ItemBaseModel item;
|
||||
|
|
@ -33,12 +35,10 @@ class FolderDetailScreen extends ConsumerWidget {
|
|||
switch (item) {
|
||||
case PhotoModel photoModel:
|
||||
final photoItems = details?.items.whereType<PhotoModel>().toList();
|
||||
await Navigator.of(context, rootNavigator: true).push(PageTransition(
|
||||
child: PhotoViewerScreen(
|
||||
items: photoItems,
|
||||
indexOfSelected: photoItems?.indexOf(photoModel) ?? 0,
|
||||
),
|
||||
type: PageTransitionType.fade));
|
||||
await context.navigateTo(PhotoViewerRoute(
|
||||
items: photoItems,
|
||||
selected: photoModel.id,
|
||||
));
|
||||
break;
|
||||
default:
|
||||
if (context.mounted) {
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ import 'dart:ui';
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:auto_route/auto_route.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:flutter_sticky_header/flutter_sticky_header.dart';
|
||||
import 'package:iconsax_plus/iconsax_plus.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:page_transition/page_transition.dart';
|
||||
import 'package:sliver_tools/sliver_tools.dart';
|
||||
|
||||
import 'package:fladder/models/boxset_model.dart';
|
||||
|
|
@ -18,7 +18,7 @@ import 'package:fladder/models/library_search/library_search_options.dart';
|
|||
import 'package:fladder/models/playlist_model.dart';
|
||||
import 'package:fladder/providers/library_search_provider.dart';
|
||||
import 'package:fladder/providers/settings/client_settings_provider.dart';
|
||||
import 'package:fladder/screens/photo_viewer/photo_viewer_screen.dart';
|
||||
import 'package:fladder/routes/auto_router.gr.dart';
|
||||
import 'package:fladder/screens/shared/media/poster_list_item.dart';
|
||||
import 'package:fladder/screens/shared/media/poster_widget.dart';
|
||||
import 'package:fladder/util/adaptive_layout/adaptive_layout.dart';
|
||||
|
|
@ -336,15 +336,11 @@ class LibraryViews extends ConsumerWidget {
|
|||
case PhotoModel _:
|
||||
final photoList = items.whereType<PhotoModel>().toList();
|
||||
if (context.mounted) {
|
||||
await Navigator.of(context, rootNavigator: true).push(
|
||||
PageTransition(
|
||||
child: PhotoViewerScreen(
|
||||
items: photoList,
|
||||
loadingItems: ref.read(librarySearchProvider(key).notifier).fetchGallery(),
|
||||
indexOfSelected: photoList.indexWhere((element) => element.id == item.id),
|
||||
),
|
||||
type: PageTransitionType.fade),
|
||||
);
|
||||
await context.router.push(PhotoViewerRoute(
|
||||
items: photoList,
|
||||
loadingItems: ref.read(librarySearchProvider(key).notifier).fetchGallery(),
|
||||
selected: item.id,
|
||||
));
|
||||
}
|
||||
if (context.mounted) context.refreshData();
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -130,7 +130,9 @@ class _PhotoViewerControllsState extends ConsumerState<PhotoViewerControls> with
|
|||
@override
|
||||
void dispose() {
|
||||
timerController.dispose();
|
||||
fullScreenHelper.closeFullScreen(ref);
|
||||
if (context.mounted) {
|
||||
fullScreenHelper.closeFullScreen(ref);
|
||||
}
|
||||
windowManager.removeListener(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,11 +3,12 @@ import 'dart:async';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'package:auto_route/annotations.dart';
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:extended_image/extended_image.dart';
|
||||
import 'package:iconsax_plus/iconsax_plus.dart';
|
||||
import 'package:flutter_blurhash/flutter_blurhash.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:iconsax_plus/iconsax_plus.dart';
|
||||
|
||||
import 'package:fladder/models/item_base_model.dart';
|
||||
import 'package:fladder/models/items/photos_model.dart';
|
||||
|
|
@ -29,13 +30,14 @@ import 'package:fladder/widgets/shared/hover_widget.dart';
|
|||
import 'package:fladder/widgets/shared/item_actions.dart';
|
||||
import 'package:fladder/widgets/shared/modal_bottom_sheet.dart';
|
||||
|
||||
@RoutePage()
|
||||
class PhotoViewerScreen extends ConsumerStatefulWidget {
|
||||
final List<PhotoModel>? items;
|
||||
final int indexOfSelected;
|
||||
final String? selected;
|
||||
final Future<List<PhotoModel>>? loadingItems;
|
||||
const PhotoViewerScreen({
|
||||
this.items,
|
||||
this.indexOfSelected = 0,
|
||||
@QueryParam("selectedId") this.selected,
|
||||
this.loadingItems,
|
||||
super.key,
|
||||
});
|
||||
|
|
@ -46,9 +48,9 @@ class PhotoViewerScreen extends ConsumerStatefulWidget {
|
|||
|
||||
class _PhotoViewerScreenState extends ConsumerState<PhotoViewerScreen> with WidgetsBindingObserver {
|
||||
late List<PhotoModel> photos = widget.items ?? [];
|
||||
late final ExtendedPageController controller = ExtendedPageController(initialPage: widget.indexOfSelected);
|
||||
late int currentPage = photos.indexWhere((value) => value.id == widget.selected).clamp(0, photos.length - 1);
|
||||
late final ExtendedPageController controller = ExtendedPageController(initialPage: currentPage);
|
||||
double currentScale = 1.0;
|
||||
late int currentPage = widget.indexOfSelected.clamp(0, photos.length - 1);
|
||||
bool showInterface = true;
|
||||
bool toolbarHover = false;
|
||||
|
||||
|
|
@ -78,7 +80,7 @@ class _PhotoViewerScreenState extends ConsumerState<PhotoViewerScreen> with Widg
|
|||
WidgetsBinding.instance.addObserver(this);
|
||||
WidgetsBinding.instance.addPostFrameCallback(
|
||||
(timeStamp) async {
|
||||
cacheNeighbors(widget.indexOfSelected, 2);
|
||||
cacheNeighbors(currentPage, 2);
|
||||
if (widget.loadingItems != null) {
|
||||
setState(() {
|
||||
loadingItems = true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue