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> {
Widget card = new Dismissable(
direction: _dismissDirection,
onResized: () { _invalidator(<int>[index]); },
onDismissed: () { dismissCard(cardModel); },
onDismissed: (DismissDirection direction) { dismissCard(cardModel); },
child: new Card(
color: _primaryColor[cardModel.color],
child: new Container(
......
......@@ -15,6 +15,8 @@ const double _kMinFlingVelocityDelta = 400.0;
const double _kFlingVelocityScale = 1.0 / 300.0;
const double _kDismissCardThreshold = 0.4;
typedef void DismissDirectionCallback(DismissDirection direction);
/// The direction in which a [Dismissable] can be dismissed.
enum DismissDirection {
/// The [Dismissable] can be dismissed by dragging either up or down.
......@@ -57,7 +59,7 @@ class Dismissable extends StatefulComponent {
final VoidCallback onResized;
/// 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.
final DismissDirection direction;
......@@ -232,8 +234,14 @@ class _DismissableState extends State<Dismissable> {
void _handleResizeProgressChanged() {
if (_resizeController.isCompleted) {
if (config.onDismissed != null)
config.onDismissed();
if (config.onDismissed != null) {
DismissDirection direction;
if (_directionIsXAxis)
direction = _dragExtent > 0 ? DismissDirection.right : DismissDirection.left;
else
direction = _dragExtent > 0 ? DismissDirection.down : DismissDirection.up;
config.onDismissed(direction);
}
} else {
if (config.onResized != null)
config.onResized();
......
......@@ -10,13 +10,15 @@ import 'package:test/test.dart';
const double itemExtent = 100.0;
Axis scrollDirection = Axis.vertical;
DismissDirection dismissDirection = DismissDirection.horizontal;
DismissDirection reportedDismissDirection;
List<int> dismissedItems = <int>[];
void handleOnResized(int item) {
expect(dismissedItems.contains(item), isFalse);
}
void handleOnDismissed(int item) {
void handleOnDismissed(DismissDirection direction, int item) {
reportedDismissDirection = direction;
expect(dismissedItems.contains(item), isFalse);
dismissedItems.add(item);
}
......@@ -25,7 +27,7 @@ Widget buildDismissableItem(int item) {
return new Dismissable(
key: new ValueKey<int>(item),
direction: dismissDirection,
onDismissed: () { handleOnDismissed(item); },
onDismissed: (DismissDirection direction) { handleOnDismissed(direction, item); },
onResized: () { handleOnResized(item); },
child: new Container(
width: itemExtent,
......@@ -129,10 +131,12 @@ void main() {
dismissItem(tester, 0, gestureDirection: DismissDirection.right);
expect(tester.findText('0'), isNull);
expect(dismissedItems, equals([0]));
expect(reportedDismissDirection, DismissDirection.right);
dismissItem(tester, 1, gestureDirection: DismissDirection.left);
expect(tester.findText('1'), isNull);
expect(dismissedItems, equals([0, 1]));
expect(reportedDismissDirection, DismissDirection.left);
});
});
......@@ -148,10 +152,12 @@ void main() {
dismissItem(tester, 0, gestureDirection: DismissDirection.up);
expect(tester.findText('0'), isNull);
expect(dismissedItems, equals([0]));
expect(reportedDismissDirection, DismissDirection.up);
dismissItem(tester, 1, gestureDirection: DismissDirection.down);
expect(tester.findText('1'), isNull);
expect(dismissedItems, equals([0, 1]));
expect(reportedDismissDirection, DismissDirection.down);
});
});
......@@ -167,10 +173,12 @@ void main() {
dismissItem(tester, 0, gestureDirection: DismissDirection.right);
expect(tester.findText('0'), isNotNull);
expect(dismissedItems, isEmpty);
dismissItem(tester, 1, gestureDirection: DismissDirection.right);
dismissItem(tester, 0, gestureDirection: DismissDirection.left);
expect(tester.findText('0'), isNull);
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