feat: Add velocity to DragTargetDetails
This commit adds a velocity parameter to the DragTargetDetails class, and where this class is used, supplies the velocity to this new parameter.
Fixes https://github.com/flutter/flutter/issues/165878
diff --git a/packages/flutter/lib/src/widgets/drag_target.dart b/packages/flutter/lib/src/widgets/drag_target.dart
index bcabe27..5f087bd 100644
--- a/packages/flutter/lib/src/widgets/drag_target.dart
+++ b/packages/flutter/lib/src/widgets/drag_target.dart
@@ -886,7 +886,7 @@
void update(DragUpdateDetails details) {
final Offset oldPosition = _position;
_position += _restrictAxis(details.delta);
- velocity = Velocity(pixelsPerSecond: _position);
+ velocity = Velocity(pixelsPerSecond: _position - oldPosition);
updateDrag(_position);
if (onDragUpdate != null && _position != oldPosition) {
onDragUpdate!(details);
diff --git a/packages/flutter/test/widgets/draggable_test.dart b/packages/flutter/test/widgets/draggable_test.dart
index da01bc1..1b605d9 100644
--- a/packages/flutter/test/widgets/draggable_test.dart
+++ b/packages/flutter/test/widgets/draggable_test.dart
@@ -87,7 +87,7 @@
expect(accepted, equals(<int>[1]));
expect(acceptedDetails, hasLength(1));
expect(acceptedDetails.first.offset, const Offset(256.0, 74.0));
- expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);
@@ -1254,7 +1254,7 @@
expect(accepted, equals(<int>[1]));
expect(acceptedDetails, hasLength(1));
expect(acceptedDetails.first.offset, const Offset(256.0, 74.0));
- expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);
@@ -1992,7 +1992,7 @@
expect(accepted, equals(<int>[1]));
expect(acceptedDetails, hasLength(1));
expect(acceptedDetails.first.offset, const Offset(256.0, 74.0));
- expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);
@@ -2137,7 +2137,7 @@
expect(accepted, equals(<int>[1]));
expect(acceptedDetails, hasLength(1));
expect(acceptedDetails.first.offset, const Offset(256.0, 74.0));
- expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);
@@ -2233,7 +2233,7 @@
expect(acceptedDoubles, equals(<double>[1.0]));
expect(acceptedDoublesDetails, hasLength(1));
expect(acceptedDoublesDetails.first.offset, const Offset(112.0, 122.0));
- expect(acceptedDoublesDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedDoublesDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('IntDragging'), findsNothing);
expect(find.text('DoubleDragging'), findsNothing);
@@ -2267,7 +2267,7 @@
expect(acceptedInts, equals(<int>[1]));
expect(acceptedIntsDetails, hasLength(1));
expect(acceptedIntsDetails.first.offset, const Offset(184.0, 122.0));
- expect(acceptedIntsDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedIntsDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(acceptedDoubles, isEmpty);
expect(acceptedDoublesDetails, isEmpty);
expect(find.text('IntDragging'), findsNothing);
@@ -2340,7 +2340,7 @@
expect(acceptedDragTargetDatas, equals(<DragTargetData>[dragTargetData]));
expect(acceptedDragTargetDataDetails, hasLength(1));
expect(acceptedDragTargetDataDetails.first.offset, const Offset(256.0, 74.0));
- expect(acceptedDragTargetDataDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedDragTargetDataDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(acceptedExtendedDragTargetDatas, isEmpty);
expect(acceptedExtendedDragTargetDataDetails, isEmpty);
@@ -2450,7 +2450,7 @@
expect(accepted, equals(<int>[1]));
expect(acceptedDetails, hasLength(1));
expect(acceptedDetails.first.offset, const Offset(256.0, 74.0));
- expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(256.0, 74.0)));
+ expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsOneWidget);
expect(find.text('Target'), findsOneWidget);
@@ -2461,9 +2461,9 @@
expect(accepted, equals(<int>[1, 1]));
expect(acceptedDetails, hasLength(2));
expect(acceptedDetails[0].offset, const Offset(256.0, 74.0));
- expect(acceptedDetails[0].velocity, const Velocity(pixelsPerSecond: Offset(256.0, 74.0)));
+ expect(acceptedDetails[0].velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(acceptedDetails[1].offset, const Offset(256.0, 74.0));
- expect(acceptedDetails[1].velocity, const Velocity(pixelsPerSecond: Offset(256.0, 74.0)));
+ expect(acceptedDetails[1].velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);
@@ -2474,9 +2474,9 @@
expect(accepted, equals(<int>[1, 1]));
expect(acceptedDetails, hasLength(2));
expect(acceptedDetails[0].offset, const Offset(256.0, 74.0));
- expect(acceptedDetails[0].velocity, const Velocity(pixelsPerSecond: Offset(256.0, 74.0)));
+ expect(acceptedDetails[0].velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(acceptedDetails[1].offset, const Offset(256.0, 74.0));
- expect(acceptedDetails[1].velocity, const Velocity(pixelsPerSecond: Offset(256.0, 74.0)));
+ expect(acceptedDetails[1].velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);
@@ -2771,7 +2771,7 @@
expect(accepted, equals(<int>[1]));
expect(acceptedDetails, hasLength(1));
expect(acceptedDetails.first.offset, const Offset(256.0, 26.0));
- expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsNothing);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);
@@ -2883,7 +2883,7 @@
expect(accepted, equals(<int>[1]));
expect(acceptedDetails, hasLength(1));
expect(acceptedDetails.first.offset, expectedDropOffset);
- expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(256.0, 74.0)));
+ expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);
@@ -2968,7 +2968,7 @@
expect(accepted, equals(<int>[1]));
expect(acceptedDetails.first.offset, const Offset(256.0, 74.0));
- expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(400.0, 150.0)));
+ expect(acceptedDetails.first.velocity, const Velocity(pixelsPerSecond: Offset(0.0, 52.0)));
expect(find.text('Source'), findsOneWidget);
expect(find.text('Dragging'), findsNothing);
expect(find.text('Target'), findsOneWidget);