From d905baffcf3c0f10c97773ca81da167664f1bae6 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sun, 5 Sep 2021 10:51:08 +0900 Subject: [PATCH] settings: improved quick action editor drag feedback --- .../common/quick_actions/available_actions.dart | 13 +++++++++---- .../common/quick_actions/quick_actions.dart | 10 +++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/widgets/settings/common/quick_actions/available_actions.dart b/lib/widgets/settings/common/quick_actions/available_actions.dart index 2f1a9ed7d..bfa5bc6a1 100644 --- a/lib/widgets/settings/common/quick_actions/available_actions.dart +++ b/lib/widgets/settings/common/quick_actions/available_actions.dart @@ -1,6 +1,8 @@ import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/settings/common/quick_actions/action_button.dart'; import 'package:aves/widgets/settings/common/quick_actions/placeholder.dart'; +import 'package:aves/widgets/viewer/overlay/common.dart'; +import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; class AvailableActionPanel extends StatelessWidget { @@ -75,10 +77,6 @@ class AvailableActionPanel extends StatelessWidget { Widget child, ) => LongPressDraggable( - data: action, - maxSimultaneousDrags: 1, - onDragStarted: () => _setDraggedAvailableAction(action), - onDragEnd: (details) => _setDraggedAvailableAction(null), feedback: MediaQueryDataProvider( child: _buildActionButton( context, @@ -86,6 +84,13 @@ class AvailableActionPanel extends StatelessWidget { showCaption: false, ), ), + data: action, + dragAnchorStrategy: (draggable, context, position) { + return childDragAnchorStrategy(draggable, context, position) + Offset(0, OverlayButton.getSize(context)); + }, + maxSimultaneousDrags: 1, + onDragStarted: () => _setDraggedAvailableAction(action), + onDragEnd: (details) => _setDraggedAvailableAction(null), childWhenDragging: child, child: child, ); diff --git a/lib/widgets/settings/common/quick_actions/quick_actions.dart b/lib/widgets/settings/common/quick_actions/quick_actions.dart index e45bdae6a..5e351048b 100644 --- a/lib/widgets/settings/common/quick_actions/quick_actions.dart +++ b/lib/widgets/settings/common/quick_actions/quick_actions.dart @@ -1,4 +1,5 @@ import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; +import 'package:aves/widgets/viewer/overlay/common.dart'; import 'package:flutter/widgets.dart'; enum QuickActionPlacement { header, action, footer } @@ -58,16 +59,19 @@ class QuickActionButton extends StatelessWidget { } Widget _buildDraggable(Widget child, T action) => LongPressDraggable( + feedback: MediaQueryDataProvider( + child: draggableFeedbackBuilder!(action), + ), data: action, + dragAnchorStrategy: (draggable, context, position) { + return childDragAnchorStrategy(draggable, context, position) + Offset(0, OverlayButton.getSize(context)); + }, maxSimultaneousDrags: 1, onDragStarted: () => _setDraggedQuickAction(action), // `onDragEnd` is only called when the widget is mounted, // so we rely on `onDraggableCanceled` and `onDragCompleted` instead onDraggableCanceled: (velocity, offset) => _setDraggedQuickAction(null), onDragCompleted: () => _setDraggedQuickAction(null), - feedback: MediaQueryDataProvider( - child: draggableFeedbackBuilder!(action), - ), childWhenDragging: child, child: child, );