From 65a1a029268885742d0b5ae363459778dcd7e03f Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Thu, 9 May 2024 00:18:31 +0800 Subject: [PATCH] Fix broken double tab to exit in new Photos and Collections tab --- app/lib/widget/home_collections.dart | 21 ++++++++++++++++++++- app/lib/widget/home_photos2.dart | 23 +++++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/app/lib/widget/home_collections.dart b/app/lib/widget/home_collections.dart index 9523e379..ce359241 100644 --- a/app/lib/widget/home_collections.dart +++ b/app/lib/widget/home_collections.dart @@ -33,6 +33,7 @@ import 'package:nc_photos/widget/archive_browser.dart'; import 'package:nc_photos/widget/collection_browser.dart'; import 'package:nc_photos/widget/collection_grid_item.dart'; import 'package:nc_photos/widget/enhanced_photo_browser.dart'; +import 'package:nc_photos/widget/handler/double_tap_exit_handler.dart'; import 'package:nc_photos/widget/home_app_bar.dart'; import 'package:nc_photos/widget/navigation_bar_blur_filter.dart'; import 'package:nc_photos/widget/new_collection_dialog.dart'; @@ -42,6 +43,7 @@ import 'package:nc_photos/widget/selection_app_bar.dart'; import 'package:nc_photos/widget/sharing_browser.dart'; import 'package:nc_photos/widget/trashbin_browser.dart'; import 'package:np_codegen/np_codegen.dart'; +import 'package:np_platform_util/np_platform_util.dart'; import 'package:np_ui/np_ui.dart'; import 'package:to_string/to_string.dart'; @@ -89,7 +91,7 @@ class _WrappedHomeCollectionsState extends State<_WrappedHomeCollections> @override Widget build(BuildContext context) { - return MultiBlocListener( + final content = MultiBlocListener( listeners: [ _BlocListener( listenWhen: (previous, current) => @@ -235,6 +237,14 @@ class _WrappedHomeCollectionsState extends State<_WrappedHomeCollections> ], ), ); + if (getRawPlatform() == NpPlatform.android) { + return WillPopScope( + onWillPop: () => _onBackButtonPressed(context), + child: content, + ); + } else { + return content; + } } Future _onNewCollectionPressed(BuildContext context) async { @@ -267,6 +277,15 @@ class _WrappedHomeCollectionsState extends State<_WrappedHomeCollections> } } + Future _onBackButtonPressed(BuildContext context) async { + if (context.state.selectedItems.isEmpty) { + return DoubleTapExitHandler()(); + } else { + context.addEvent(const _SetSelectedItems(items: {})); + return false; + } + } + late final _Bloc _bloc = context.read(); } diff --git a/app/lib/widget/home_photos2.dart b/app/lib/widget/home_photos2.dart index b888d083..03c01701 100644 --- a/app/lib/widget/home_photos2.dart +++ b/app/lib/widget/home_photos2.dart @@ -43,6 +43,7 @@ import 'package:nc_photos/widget/collection_browser.dart'; import 'package:nc_photos/widget/collection_picker.dart'; import 'package:nc_photos/widget/file_sharer_dialog.dart'; import 'package:nc_photos/widget/finger_listener.dart'; +import 'package:nc_photos/widget/handler/double_tap_exit_handler.dart'; import 'package:nc_photos/widget/home_app_bar.dart'; import 'package:nc_photos/widget/navigation_bar_blur_filter.dart'; import 'package:nc_photos/widget/network_thumbnail.dart'; @@ -59,6 +60,7 @@ import 'package:np_common/object_util.dart'; import 'package:np_common/or_null.dart'; import 'package:np_datetime/np_datetime.dart'; import 'package:np_db/np_db.dart'; +import 'package:np_platform_util/np_platform_util.dart'; import 'package:np_ui/np_ui.dart'; import 'package:to_string/to_string.dart'; import 'package:visibility_detector/visibility_detector.dart'; @@ -115,7 +117,7 @@ class _WrappedHomePhotosState extends State<_WrappedHomePhotos> { @override Widget build(BuildContext context) { - return VisibilityDetector( + final content = VisibilityDetector( key: _key, onVisibilityChanged: (info) { final isVisible = info.visibleFraction >= 0.2; @@ -167,6 +169,23 @@ class _WrappedHomePhotosState extends State<_WrappedHomePhotos> { ), ), ); + if (getRawPlatform() == NpPlatform.android) { + return WillPopScope( + onWillPop: () => _onBackButtonPressed(context), + child: content, + ); + } else { + return content; + } + } + + Future _onBackButtonPressed(BuildContext context) async { + if (context.state.selectedItems.isEmpty) { + return DoubleTapExitHandler()(); + } else { + context.addEvent(const _SetSelectedItems(items: {})); + return false; + } } late final _bloc = context.bloc; @@ -473,7 +492,7 @@ typedef _BlocSelector = BlocSelector<_Bloc, _State, T>; extension on BuildContext { _Bloc get bloc => read<_Bloc>(); - // _State get state => bloc.state; + _State get state => bloc.state; void addEvent(_Event event) => bloc.add(event); }