settings: improved quick action editor drag feedback

This commit is contained in:
Thibault Deckers 2021-09-05 10:51:08 +09:00
parent 77e5e950ef
commit d905baffcf
2 changed files with 16 additions and 7 deletions

View file

@ -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<T extends Object> extends StatelessWidget {
@ -75,10 +77,6 @@ class AvailableActionPanel<T extends Object> extends StatelessWidget {
Widget child,
) =>
LongPressDraggable<T>(
data: action,
maxSimultaneousDrags: 1,
onDragStarted: () => _setDraggedAvailableAction(action),
onDragEnd: (details) => _setDraggedAvailableAction(null),
feedback: MediaQueryDataProvider(
child: _buildActionButton(
context,
@ -86,6 +84,13 @@ class AvailableActionPanel<T extends Object> 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,
);

View file

@ -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<T extends Object> 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,
);