diff --git a/mobile/lib/modules/album/views/album_viewer_page.dart b/mobile/lib/modules/album/views/album_viewer_page.dart index 03b6581f56..7e2dfac83e 100644 --- a/mobile/lib/modules/album/views/album_viewer_page.dart +++ b/mobile/lib/modules/album/views/album_viewer_page.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -248,32 +250,45 @@ class AlbumViewerPage extends HookConsumerWidget { ); } + Future onWillPop() async { + final isMultiselectEnable = ref.read(assetSelectionProvider).selectedAssetsInAlbumViewer.isNotEmpty; + if (isMultiselectEnable) { + ref.watch(assetSelectionProvider.notifier).removeAll(); + return false; + } + + return true; + } + Widget buildBody(AlbumResponseDto albumInfo) { - return GestureDetector( - onTap: () { - titleFocusNode.unfocus(); - }, - child: DraggableScrollbar.semicircle( - backgroundColor: Theme.of(context).hintColor, - controller: scrollController, - heightScrollThumb: 48.0, - child: CustomScrollView( + return WillPopScope( + onWillPop: onWillPop, + child: GestureDetector( + onTap: () { + titleFocusNode.unfocus(); + }, + child: DraggableScrollbar.semicircle( + backgroundColor: Theme.of(context).hintColor, controller: scrollController, - slivers: [ - buildHeader(albumInfo), - SliverPersistentHeader( - pinned: true, - delegate: ImmichSliverPersistentAppBarDelegate( - minHeight: 50, - maxHeight: 50, - child: Container( - color: Theme.of(context).scaffoldBackgroundColor, - child: buildControlButton(albumInfo), + heightScrollThumb: 48.0, + child: CustomScrollView( + controller: scrollController, + slivers: [ + buildHeader(albumInfo), + SliverPersistentHeader( + pinned: true, + delegate: ImmichSliverPersistentAppBarDelegate( + minHeight: 50, + maxHeight: 50, + child: Container( + color: Theme.of(context).scaffoldBackgroundColor, + child: buildControlButton(albumInfo), + ), ), ), - ), - buildImageGrid(albumInfo) - ], + buildImageGrid(albumInfo) + ], + ), ), ), ); diff --git a/mobile/lib/modules/home/views/home_page.dart b/mobile/lib/modules/home/views/home_page.dart index d032a61651..5b1ac7cd14 100644 --- a/mobile/lib/modules/home/views/home_page.dart +++ b/mobile/lib/modules/home/views/home_page.dart @@ -200,34 +200,46 @@ class HomePage extends HookConsumerWidget { ); } - return SafeArea( - bottom: !multiselectEnabled.state, - top: true, - child: Stack( - children: [ - ref.watch(assetProvider).renderList == null || - ref.watch(assetProvider).allAssets.isEmpty - ? buildLoadingIndicator() - : ImmichAssetGrid( - renderList: ref.watch(assetProvider).renderList!, - allAssets: ref.watch(assetProvider).allAssets, - assetsPerRow: appSettingService - .getSetting(AppSettingsEnum.tilesPerRow), - showStorageIndicator: appSettingService - .getSetting(AppSettingsEnum.storageIndicator), - listener: selectionListener, - selectionActive: selectionEnabledHook.value, - ), - if (selectionEnabledHook.value) - ControlBottomAppBar( - onShare: onShareAssets, - onDelete: onDelete, - onAddToAlbum: onAddToAlbum, - albums: albums, - sharedAlbums: sharedAlbums, - onCreateNewAlbum: onCreateNewAlbum, - ), - ], + Future onWillPop() async { + if (multiselectEnabled.state) { + selectionEnabledHook.value = false; + return false; + } + + return true; + } + + return WillPopScope( + onWillPop: onWillPop, + child: SafeArea( + bottom: !multiselectEnabled.state, + top: true, + child: Stack( + children: [ + ref.watch(assetProvider).renderList == null || + ref.watch(assetProvider).allAssets.isEmpty + ? buildLoadingIndicator() + : ImmichAssetGrid( + renderList: ref.watch(assetProvider).renderList!, + allAssets: ref.watch(assetProvider).allAssets, + assetsPerRow: appSettingService + .getSetting(AppSettingsEnum.tilesPerRow), + showStorageIndicator: appSettingService + .getSetting(AppSettingsEnum.storageIndicator), + listener: selectionListener, + selectionActive: selectionEnabledHook.value, + ), + if (selectionEnabledHook.value) + ControlBottomAppBar( + onShare: onShareAssets, + onDelete: onDelete, + onAddToAlbum: onAddToAlbum, + albums: albums, + sharedAlbums: sharedAlbums, + onCreateNewAlbum: onCreateNewAlbum, + ), + ], + ), ), ); }