[client] Move SelectionMode to navigation package

This commit is contained in:
Abhishek Shroff
2024-11-26 19:58:05 +05:30
parent 67bc1eb385
commit aa600dcd91
12 changed files with 31 additions and 53 deletions

View File

@@ -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);
}

View File

@@ -45,21 +45,21 @@ class AppActions extends StatelessWidget {
NavUpIntent: CallbackAction<NavUpIntent>(onInvoke: (i) async {
final parent = context.read<ExplorerState>().folder?.parent;
if (parent != null) {
context.read<NavHistoryManager>().go(context, NavDestinationFolder(folderId: parent));
context.read<NavHistoryManager>().go(NavDestinationFolder(folderId: parent));
}
return null;
}),
NavHomeIntent: CallbackAction<NavHomeIntent>(
onInvoke: (i) => context.read<NavHistoryManager>().go(context, NavDestinationFolder(folderId: context.read<PhylumAccount>().userHome)),
onInvoke: (i) => context.read<NavHistoryManager>().go(NavDestinationFolder(folderId: context.read<PhylumAccount>().userHome)),
),
NavToFolderIntent: CallbackAction<NavToFolderIntent>(
onInvoke: (i) => context.read<NavHistoryManager>().go(context, NavDestinationFolder(folderId: i.folderId)),
onInvoke: (i) => context.read<NavHistoryManager>().go(NavDestinationFolder(folderId: i.folderId)),
),
NavBackIntent: CallbackAction<NavBackIntent>(
onInvoke: (i) => context.read<NavHistoryManager>().goBack(context),
onInvoke: (i) => context.read<NavHistoryManager>().goBack(),
),
NavForwardIntent: CallbackAction<NavForwardIntent>(
onInvoke: (i) => context.read<NavHistoryManager>().goForward(context),
onInvoke: (i) => context.read<NavHistoryManager>().goForward(),
),
},
child: child,

View File

@@ -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<AppLayout> {
@override
void didUpdateWidget(covariant AppLayout oldWidget) {
super.didUpdateWidget(oldWidget);
context.read<NavHistoryManager>().handleDestinationChange(widget.destination);
context.read<NavHistoryManager>().go(widget.destination);
}
@override

View File

@@ -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';

View File

@@ -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';

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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 {

View File

@@ -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<bool> refresh(PhylumAccount account);
Stream<Resource?> 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<bool> refresh(PhylumAccount account) {
return account.resourceRepository.requestResource(folderId).then((result) => result.success);

View File

@@ -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;

View File

@@ -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<NavDestination> _back;
@@ -30,10 +29,8 @@ class NavHistoryState {
class NavHistoryManager extends StateNotifier<NavHistoryState> {
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<NavHistoryState> {
}
}
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<NavHistoryState> {
);
}
void goForward(BuildContext context) {
void goForward() {
if (!state.canGoForward) return;
int len = state._forward.length;
final target = state._forward[len - 1];

View File

@@ -0,0 +1,8 @@
enum SelectionMode {
single,
range,
toggle,
add,
noChange,
none,
}