Commit 0a0f3e7a authored by Hans Muller's avatar Hans Muller

Merge pull request #2376 from HansMuller/dismiss_direction

Add DismissDirection onDismissed() callback parameter
parents e9e7f44d 44cd57f2
...@@ -298,7 +298,7 @@ class CardCollectionState extends State<CardCollection> { ...@@ -298,7 +298,7 @@ class CardCollectionState extends State<CardCollection> {
Widget card = new Dismissable( Widget card = new Dismissable(
direction: _dismissDirection, direction: _dismissDirection,
onResized: () { _invalidator(<int>[index]); }, onResized: () { _invalidator(<int>[index]); },
onDismissed: () { dismissCard(cardModel); }, onDismissed: (DismissDirection direction) { dismissCard(cardModel); },
child: new Card( child: new Card(
color: _primaryColor[cardModel.color], color: _primaryColor[cardModel.color],
child: new Container( child: new Container(
......
...@@ -15,6 +15,8 @@ const double _kMinFlingVelocityDelta = 400.0; ...@@ -15,6 +15,8 @@ const double _kMinFlingVelocityDelta = 400.0;
const double _kFlingVelocityScale = 1.0 / 300.0; const double _kFlingVelocityScale = 1.0 / 300.0;
const double _kDismissCardThreshold = 0.4; const double _kDismissCardThreshold = 0.4;
typedef void DismissDirectionCallback(DismissDirection direction);
/// The direction in which a [Dismissable] can be dismissed. /// The direction in which a [Dismissable] can be dismissed.
enum DismissDirection { enum DismissDirection {
/// The [Dismissable] can be dismissed by dragging either up or down. /// The [Dismissable] can be dismissed by dragging either up or down.
...@@ -57,7 +59,7 @@ class Dismissable extends StatefulComponent { ...@@ -57,7 +59,7 @@ class Dismissable extends StatefulComponent {
final VoidCallback onResized; final VoidCallback onResized;
/// Called when the widget has been dismissed, after finishing resizing. /// Called when the widget has been dismissed, after finishing resizing.
final VoidCallback onDismissed; final DismissDirectionCallback onDismissed;
/// The direction in which the widget can be dismissed. /// The direction in which the widget can be dismissed.
final DismissDirection direction; final DismissDirection direction;
...@@ -232,8 +234,14 @@ class _DismissableState extends State<Dismissable> { ...@@ -232,8 +234,14 @@ class _DismissableState extends State<Dismissable> {
void _handleResizeProgressChanged() { void _handleResizeProgressChanged() {
if (_resizeController.isCompleted) { if (_resizeController.isCompleted) {
if (config.onDismissed != null) if (config.onDismissed != null) {
config.onDismissed(); DismissDirection direction;
if (_directionIsXAxis)
direction = _dragExtent > 0 ? DismissDirection.right : DismissDirection.left;
else
direction = _dragExtent > 0 ? DismissDirection.down : DismissDirection.up;
config.onDismissed(direction);
}
} else { } else {
if (config.onResized != null) if (config.onResized != null)
config.onResized(); config.onResized();
......
...@@ -10,13 +10,15 @@ import 'package:test/test.dart'; ...@@ -10,13 +10,15 @@ import 'package:test/test.dart';
const double itemExtent = 100.0; const double itemExtent = 100.0;
Axis scrollDirection = Axis.vertical; Axis scrollDirection = Axis.vertical;
DismissDirection dismissDirection = DismissDirection.horizontal; DismissDirection dismissDirection = DismissDirection.horizontal;
DismissDirection reportedDismissDirection;
List<int> dismissedItems = <int>[]; List<int> dismissedItems = <int>[];
void handleOnResized(int item) { void handleOnResized(int item) {
expect(dismissedItems.contains(item), isFalse); expect(dismissedItems.contains(item), isFalse);
} }
void handleOnDismissed(int item) { void handleOnDismissed(DismissDirection direction, int item) {
reportedDismissDirection = direction;
expect(dismissedItems.contains(item), isFalse); expect(dismissedItems.contains(item), isFalse);
dismissedItems.add(item); dismissedItems.add(item);
} }
...@@ -25,7 +27,7 @@ Widget buildDismissableItem(int item) { ...@@ -25,7 +27,7 @@ Widget buildDismissableItem(int item) {
return new Dismissable( return new Dismissable(
key: new ValueKey<int>(item), key: new ValueKey<int>(item),
direction: dismissDirection, direction: dismissDirection,
onDismissed: () { handleOnDismissed(item); }, onDismissed: (DismissDirection direction) { handleOnDismissed(direction, item); },
onResized: () { handleOnResized(item); }, onResized: () { handleOnResized(item); },
child: new Container( child: new Container(
width: itemExtent, width: itemExtent,
...@@ -129,10 +131,12 @@ void main() { ...@@ -129,10 +131,12 @@ void main() {
dismissItem(tester, 0, gestureDirection: DismissDirection.right); dismissItem(tester, 0, gestureDirection: DismissDirection.right);
expect(tester.findText('0'), isNull); expect(tester.findText('0'), isNull);
expect(dismissedItems, equals([0])); expect(dismissedItems, equals([0]));
expect(reportedDismissDirection, DismissDirection.right);
dismissItem(tester, 1, gestureDirection: DismissDirection.left); dismissItem(tester, 1, gestureDirection: DismissDirection.left);
expect(tester.findText('1'), isNull); expect(tester.findText('1'), isNull);
expect(dismissedItems, equals([0, 1])); expect(dismissedItems, equals([0, 1]));
expect(reportedDismissDirection, DismissDirection.left);
}); });
}); });
...@@ -148,10 +152,12 @@ void main() { ...@@ -148,10 +152,12 @@ void main() {
dismissItem(tester, 0, gestureDirection: DismissDirection.up); dismissItem(tester, 0, gestureDirection: DismissDirection.up);
expect(tester.findText('0'), isNull); expect(tester.findText('0'), isNull);
expect(dismissedItems, equals([0])); expect(dismissedItems, equals([0]));
expect(reportedDismissDirection, DismissDirection.up);
dismissItem(tester, 1, gestureDirection: DismissDirection.down); dismissItem(tester, 1, gestureDirection: DismissDirection.down);
expect(tester.findText('1'), isNull); expect(tester.findText('1'), isNull);
expect(dismissedItems, equals([0, 1])); expect(dismissedItems, equals([0, 1]));
expect(reportedDismissDirection, DismissDirection.down);
}); });
}); });
...@@ -167,10 +173,12 @@ void main() { ...@@ -167,10 +173,12 @@ void main() {
dismissItem(tester, 0, gestureDirection: DismissDirection.right); dismissItem(tester, 0, gestureDirection: DismissDirection.right);
expect(tester.findText('0'), isNotNull); expect(tester.findText('0'), isNotNull);
expect(dismissedItems, isEmpty); expect(dismissedItems, isEmpty);
dismissItem(tester, 1, gestureDirection: DismissDirection.right);
dismissItem(tester, 0, gestureDirection: DismissDirection.left); dismissItem(tester, 0, gestureDirection: DismissDirection.left);
expect(tester.findText('0'), isNull); expect(tester.findText('0'), isNull);
expect(dismissedItems, equals([0])); expect(dismissedItems, equals([0]));
dismissItem(tester, 1, gestureDirection: DismissDirection.left);
}); });
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment