diff --git a/client/lib/app_shortcuts.dart b/client/lib/app_shortcuts.dart index 3c690b1f..aa2f89e9 100644 --- a/client/lib/app_shortcuts.dart +++ b/client/lib/app_shortcuts.dart @@ -1,23 +1,17 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; - -enum SelectionMode { - single, - range, - toggle, - add, - noChange, - none, -} +import 'package:phylum/ui/navigation/selection_mode.dart'; class FocusUpIntent extends Intent { final SelectionMode mode; + const FocusUpIntent(this.mode); } class FocusDownIntent extends Intent { final SelectionMode mode; + const FocusDownIntent(this.mode); } @@ -31,6 +25,7 @@ class SelectAllIntent extends Intent { class CopyToClipboardIntent extends Intent { final bool cut; + const CopyToClipboardIntent(this.cut); } diff --git a/client/lib/ui/app/app_actions.dart b/client/lib/ui/app/app_actions.dart index f84d91b5..aecda7ba 100644 --- a/client/lib/ui/app/app_actions.dart +++ b/client/lib/ui/app/app_actions.dart @@ -45,21 +45,21 @@ class AppActions extends StatelessWidget { NavUpIntent: CallbackAction(onInvoke: (i) async { final parent = context.read().folder?.parent; if (parent != null) { - context.read().go(context, NavDestinationFolder(folderId: parent)); + context.read().go(NavDestinationFolder(folderId: parent)); } return null; }), NavHomeIntent: CallbackAction( - onInvoke: (i) => context.read().go(context, NavDestinationFolder(folderId: context.read().userHome)), + onInvoke: (i) => context.read().go(NavDestinationFolder(folderId: context.read().userHome)), ), NavToFolderIntent: CallbackAction( - onInvoke: (i) => context.read().go(context, NavDestinationFolder(folderId: i.folderId)), + onInvoke: (i) => context.read().go(NavDestinationFolder(folderId: i.folderId)), ), NavBackIntent: CallbackAction( - onInvoke: (i) => context.read().goBack(context), + onInvoke: (i) => context.read().goBack(), ), NavForwardIntent: CallbackAction( - onInvoke: (i) => context.read().goForward(context), + onInvoke: (i) => context.read().goForward(), ), }, child: child, diff --git a/client/lib/ui/app/app_layout.dart b/client/lib/ui/app/app_layout.dart index cd3a3bf2..073cd9b8 100644 --- a/client/lib/ui/app/app_layout.dart +++ b/client/lib/ui/app/app_layout.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter_state_notifier/flutter_state_notifier.dart'; -import 'package:phylum/app_shortcuts.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/app/app_actions.dart'; import 'package:phylum/ui/app/fab_action.dart'; @@ -12,6 +11,7 @@ import 'package:phylum/ui/navigation/explorer_controller.dart'; import 'package:phylum/ui/explorer/path_view.dart'; import 'package:phylum/ui/explorer/resource_drop_and_drop.dart'; import 'package:phylum/ui/explorer/resource_info_view.dart'; +import 'package:phylum/ui/navigation/selection_mode.dart'; import 'package:provider/provider.dart'; class AppLayout extends StatefulWidget { @@ -27,7 +27,7 @@ class _AppLayoutState extends State { @override void didUpdateWidget(covariant AppLayout oldWidget) { super.didUpdateWidget(oldWidget); - context.read().handleDestinationChange(widget.destination); + context.read().go(widget.destination); } @override diff --git a/client/lib/ui/destination_picker/destination_picker.dart b/client/lib/ui/destination_picker/destination_picker.dart index 5f1746ff..a2869aa4 100644 --- a/client/lib/ui/destination_picker/destination_picker.dart +++ b/client/lib/ui/destination_picker/destination_picker.dart @@ -6,6 +6,7 @@ import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/navigation/destination.dart'; import 'package:phylum/ui/navigation/explorer_controller.dart'; import 'package:phylum/ui/explorer/resource_icon_extension.dart'; +import 'package:phylum/ui/navigation/selection_mode.dart'; import 'package:phylum/util/upload_utils.dart'; import 'package:provider/provider.dart'; diff --git a/client/lib/ui/explorer/explorer_actions.dart b/client/lib/ui/explorer/explorer_actions.dart index 7fbf6fe2..8d0f9a84 100644 --- a/client/lib/ui/explorer/explorer_actions.dart +++ b/client/lib/ui/explorer/explorer_actions.dart @@ -5,6 +5,7 @@ import 'package:phylum/libphylum/actions/action_resource_move.dart'; import 'package:phylum/libphylum/db/db.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/explorer/paste_action_handler.dart'; +import 'package:phylum/ui/navigation/selection_mode.dart'; import 'package:phylum/ui/preview/resource_preview.dart'; import 'package:phylum/util/dialogs.dart'; import 'package:provider/provider.dart'; diff --git a/client/lib/ui/explorer/explorer_gesture_handler.dart b/client/lib/ui/explorer/explorer_gesture_handler.dart index b076ae30..9552e61f 100644 --- a/client/lib/ui/explorer/explorer_gesture_handler.dart +++ b/client/lib/ui/explorer/explorer_gesture_handler.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:phylum/app_shortcuts.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/navigation/explorer_controller.dart'; import 'package:phylum/ui/menu/menu_option.dart'; import 'package:phylum/ui/menu/option_groups.dart'; +import 'package:phylum/ui/navigation/selection_mode.dart'; import 'package:provider/provider.dart'; class ExplorerGestureHandler extends StatelessWidget { diff --git a/client/lib/ui/explorer/resource_drop_and_drop.dart b/client/lib/ui/explorer/resource_drop_and_drop.dart index 0dc79818..551dffa6 100644 --- a/client/lib/ui/explorer/resource_drop_and_drop.dart +++ b/client/lib/ui/explorer/resource_drop_and_drop.dart @@ -3,13 +3,13 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:phylum/app_shortcuts.dart'; import 'package:phylum/libphylum/actions/action_resource_move.dart'; import 'package:phylum/libphylum/db/db.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/navigation/explorer_controller.dart'; import 'package:phylum/ui/explorer/resource_details_row.dart'; import 'package:phylum/ui/explorer/resource_icon_extension.dart'; +import 'package:phylum/ui/navigation/selection_mode.dart'; import 'package:phylum/util/upload_utils.dart'; import 'package:provider/provider.dart'; import 'package:super_drag_and_drop/super_drag_and_drop.dart'; diff --git a/client/lib/ui/explorer/resource_item_gesture_handler.dart b/client/lib/ui/explorer/resource_item_gesture_handler.dart index 14b0cd51..778de60d 100644 --- a/client/lib/ui/explorer/resource_item_gesture_handler.dart +++ b/client/lib/ui/explorer/resource_item_gesture_handler.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:phylum/app_shortcuts.dart'; import 'package:phylum/libphylum/db/db.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/navigation/explorer_controller.dart'; import 'package:phylum/ui/explorer/resource_drop_and_drop.dart'; import 'package:phylum/ui/menu/menu_option.dart'; import 'package:phylum/ui/menu/option_groups.dart'; +import 'package:phylum/ui/navigation/selection_mode.dart'; import 'package:provider/provider.dart'; class ResourceItemGestureHandler extends StatefulWidget { diff --git a/client/lib/ui/navigation/destination.dart b/client/lib/ui/navigation/destination.dart index d5a363a4..aff00522 100644 --- a/client/lib/ui/navigation/destination.dart +++ b/client/lib/ui/navigation/destination.dart @@ -1,13 +1,9 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; import 'package:phylum/libphylum/db/db.dart'; import 'package:phylum/libphylum/phylum_account.dart'; sealed class NavDestination { const NavDestination(); - void go(BuildContext context); - Future refresh(PhylumAccount account); Stream watchResource(PhylumAccount account); @@ -22,11 +18,6 @@ class NavDestinationFolder extends NavDestination { NavDestinationFolder({required this.folderId}); - @override - void go(BuildContext context) { - context.goNamed('folder', pathParameters: {'id': folderId}); - } - @override Future refresh(PhylumAccount account) { return account.resourceRepository.requestResource(folderId).then((result) => result.success); diff --git a/client/lib/ui/navigation/explorer_controller.dart b/client/lib/ui/navigation/explorer_controller.dart index 83e945ca..c79a9e88 100644 --- a/client/lib/ui/navigation/explorer_controller.dart +++ b/client/lib/ui/navigation/explorer_controller.dart @@ -1,13 +1,13 @@ import 'dart:async'; import 'dart:math'; -import 'package:phylum/app_shortcuts.dart'; import 'package:phylum/libphylum/db/db.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'package:state_notifier/state_notifier.dart'; import 'destination.dart'; import 'history_manager.dart'; +import 'selection_mode.dart'; class ExplorerState { final NavDestination destination; diff --git a/client/lib/ui/navigation/history_manager.dart b/client/lib/ui/navigation/history_manager.dart index 111421de..906c08e5 100644 --- a/client/lib/ui/navigation/history_manager.dart +++ b/client/lib/ui/navigation/history_manager.dart @@ -1,8 +1,7 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:phylum/ui/navigation/destination.dart'; import 'package:state_notifier/state_notifier.dart'; +import 'destination.dart'; + class NavHistoryState { final NavDestination current; final List _back; @@ -30,10 +29,8 @@ class NavHistoryState { class NavHistoryManager extends StateNotifier { NavHistoryManager(NavDestination destination) : super(NavHistoryState(current: destination)); - void go(BuildContext context, NavDestination destination) { - if (kIsWeb) { - destination.go(context); - } else { + void go(NavDestination destination) { + if (state.current != destination) { state = NavHistoryState( current: destination, back: [...state._back, state.current], @@ -42,22 +39,7 @@ class NavHistoryManager extends StateNotifier { } } - void handleDestinationChange(NavDestination destination) { - if (kIsWeb) { - state = NavHistoryState( - current: destination, - ); - } else if (destination != state.current) { - // For handling deep links - state = NavHistoryState( - current: destination, - back: [...state._back, state.current], - forward: const [], - ); - } - } - - void goBack(BuildContext context) { + void goBack() { if (!state.canGoBack) return; int len = state._back.length; final target = state._back[len - 1]; @@ -68,7 +50,7 @@ class NavHistoryManager extends StateNotifier { ); } - void goForward(BuildContext context) { + void goForward() { if (!state.canGoForward) return; int len = state._forward.length; final target = state._forward[len - 1]; diff --git a/client/lib/ui/navigation/selection_mode.dart b/client/lib/ui/navigation/selection_mode.dart new file mode 100644 index 00000000..e3886695 --- /dev/null +++ b/client/lib/ui/navigation/selection_mode.dart @@ -0,0 +1,8 @@ +enum SelectionMode { + single, + range, + toggle, + add, + noChange, + none, +}