Add DismissDirection onDismissed() callback parameter
This commit is contained in:
parent
e9e7f44df8
commit
44cd57f2f2
@ -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;
|
|||||||
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 {
|
|||||||
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> {
|
|||||||
|
|
||||||
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';
|
|||||||
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) {
|
|||||||
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() {
|
|||||||
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() {
|
|||||||
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() {
|
|||||||
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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user