From 5e1af2f37e8483322b08cad464af5672a5350766 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Sat, 12 Mar 2016 18:24:13 -0800 Subject: [PATCH] [rename fixit] DismissDirection left -> endToStart, right -> startToEnd Removes an LTR bias in DismissDirection. Fixes #2562 --- dev/manual_tests/card_collection.dart | 14 ++++---- .../lib/demo/leave_behind_demo.dart | 10 +++--- .../flutter/lib/src/widgets/dismissable.dart | 24 +++++++------- .../flutter/test/widget/dismissable_test.dart | 32 +++++++++---------- 4 files changed, 42 insertions(+), 38 deletions(-) diff --git a/dev/manual_tests/card_collection.dart b/dev/manual_tests/card_collection.dart index 4550cbb741..50859676a6 100644 --- a/dev/manual_tests/card_collection.dart +++ b/dev/manual_tests/card_collection.dart @@ -135,8 +135,8 @@ class CardCollectionState extends State { buildDrawerColorRadioItem("Teal", Colors.teal, _primaryColor, _selectColor), new Divider(), buildDrawerDirectionRadioItem("Dismiss horizontally", DismissDirection.horizontal, _dismissDirection, _changeDismissDirection, icon: Icons.code), - buildDrawerDirectionRadioItem("Dismiss left", DismissDirection.left, _dismissDirection, _changeDismissDirection, icon: Icons.arrow_back), - buildDrawerDirectionRadioItem("Dismiss right", DismissDirection.right, _dismissDirection, _changeDismissDirection, icon: Icons.arrow_forward), + buildDrawerDirectionRadioItem("Dismiss left", DismissDirection.endToStart, _dismissDirection, _changeDismissDirection, icon: Icons.arrow_back), + buildDrawerDirectionRadioItem("Dismiss right", DismissDirection.startToEnd, _dismissDirection, _changeDismissDirection, icon: Icons.arrow_forward), new Divider(), buildFontRadioItem("Left-align text", new TextStyle(textAlign: TextAlign.left), _textStyle, _changeTextStyle, icon: Icons.format_align_left, enabled: !_editable), buildFontRadioItem("Center-align text", new TextStyle(textAlign: TextAlign.center), _textStyle, _changeTextStyle, icon: Icons.format_align_center, enabled: !_editable), @@ -338,22 +338,24 @@ class CardCollectionState extends State { case DismissDirection.horizontal: backgroundMessage = "Swipe in either direction"; break; - case DismissDirection.left: + case DismissDirection.endToStart: backgroundMessage = "Swipe left to dismiss"; break; - case DismissDirection.right: + case DismissDirection.startToEnd: backgroundMessage = "Swipe right to dismiss"; break; default: backgroundMessage = "Unsupported dismissDirection"; } + // TODO(abarth): This icon is wrong in RTL. Widget leftArrowIcon = new Icon(icon: Icons.arrow_back, size: 36.0); - if (_dismissDirection == DismissDirection.right) + if (_dismissDirection == DismissDirection.startToEnd) leftArrowIcon = new Opacity(opacity: 0.1, child: leftArrowIcon); + // TODO(abarth): This icon is wrong in RTL. Widget rightArrowIcon = new Icon(icon: Icons.arrow_forward, size: 36.0); - if (_dismissDirection == DismissDirection.left) + if (_dismissDirection == DismissDirection.endToStart) rightArrowIcon = new Opacity(opacity: 0.1, child: rightArrowIcon); // The background Widget appears behind the Dismissable card when the card diff --git a/examples/material_gallery/lib/demo/leave_behind_demo.dart b/examples/material_gallery/lib/demo/leave_behind_demo.dart index cbc86aa2cd..01a064f87f 100644 --- a/examples/material_gallery/lib/demo/leave_behind_demo.dart +++ b/examples/material_gallery/lib/demo/leave_behind_demo.dart @@ -61,10 +61,10 @@ class LeaveBehindDemoState extends State { _dismissDirection = DismissDirection.horizontal; break; case LeaveBehindDemoAction.leftSwipe: - _dismissDirection = DismissDirection.left; + _dismissDirection = DismissDirection.endToStart; break; case LeaveBehindDemoAction.rightSwipe: - _dismissDirection = DismissDirection.right; + _dismissDirection = DismissDirection.startToEnd; break; } } @@ -87,7 +87,7 @@ class LeaveBehindDemoState extends State { setState(() { leaveBehindItems.remove(item); }); - final String action = (direction == DismissDirection.left) ? 'archived' : 'deleted'; + final String action = (direction == DismissDirection.endToStart) ? 'archived' : 'deleted'; _scaffoldKey.currentState.showSnackBar(new SnackBar( content: new Text('You $action item ${item.index}'), action: new SnackBarAction( @@ -143,12 +143,12 @@ class LeaveBehindDemoState extends State { ), new CheckedPopupMenuItem( value: LeaveBehindDemoAction.leftSwipe, - checked: _dismissDirection == DismissDirection.left, + checked: _dismissDirection == DismissDirection.endToStart, child: new Text('Only swipe left') ), new CheckedPopupMenuItem( value: LeaveBehindDemoAction.rightSwipe, - checked: _dismissDirection == DismissDirection.right, + checked: _dismissDirection == DismissDirection.startToEnd, child: new Text('Only swipe right') ) ] diff --git a/packages/flutter/lib/src/widgets/dismissable.dart b/packages/flutter/lib/src/widgets/dismissable.dart index dd289948be..8e599257f8 100644 --- a/packages/flutter/lib/src/widgets/dismissable.dart +++ b/packages/flutter/lib/src/widgets/dismissable.dart @@ -25,11 +25,13 @@ enum DismissDirection { /// The [Dismissable] can be dismissed by dragging either left or right. horizontal, - /// The [Dismissable] can be dismissed by dragging left only. - left, + /// The [Dismissable] can be dismissed by dragging in the reverse of the + /// reading direction (e.g., from right to left in left-to-right languages). + endToStart, - /// The [Dismissable] can be dismissed by dragging right only. - right, + /// The [Dismissable] can be dismissed by dragging in the reading direction + /// (e.g., from left to right in left-to-right languages). + startToEnd, /// The [Dismissable] can be dismissed by dragging up only. up, @@ -115,13 +117,13 @@ class _DismissableState extends State { bool get _directionIsXAxis { return config.direction == DismissDirection.horizontal - || config.direction == DismissDirection.left - || config.direction == DismissDirection.right; + || config.direction == DismissDirection.endToStart + || config.direction == DismissDirection.startToEnd; } DismissDirection get _dismissDirection { if (_directionIsXAxis) - return _dragExtent > 0 ? DismissDirection.right : DismissDirection.left; + return _dragExtent > 0 ? DismissDirection.startToEnd : DismissDirection.endToStart; return _dragExtent > 0 ? DismissDirection.down : DismissDirection.up; } @@ -162,13 +164,13 @@ class _DismissableState extends State { break; case DismissDirection.up: - case DismissDirection.left: + case DismissDirection.endToStart: if (_dragExtent + delta < 0) _dragExtent += delta; break; case DismissDirection.down: - case DismissDirection.right: + case DismissDirection.startToEnd: if (_dragExtent + delta > 0) _dragExtent += delta; break; @@ -201,7 +203,7 @@ class _DismissableState extends State { switch(config.direction) { case DismissDirection.horizontal: return vx.abs() > _kMinFlingVelocity; - case DismissDirection.left: + case DismissDirection.endToStart: return -vx > _kMinFlingVelocity; default: return vx > _kMinFlingVelocity; @@ -275,7 +277,7 @@ class _DismissableState extends State { Widget background = config.background; if (config.secondaryBackground != null) { final DismissDirection direction = _dismissDirection; - if (direction == DismissDirection.left || direction == DismissDirection.up) + if (direction == DismissDirection.endToStart || direction == DismissDirection.up) background = config.secondaryBackground; } diff --git a/packages/flutter/test/widget/dismissable_test.dart b/packages/flutter/test/widget/dismissable_test.dart index b8e1634f51..1aaf250546 100644 --- a/packages/flutter/test/widget/dismissable_test.dart +++ b/packages/flutter/test/widget/dismissable_test.dart @@ -58,13 +58,13 @@ void dismissElement(WidgetTester tester, Element itemElement, { DismissDirection Point downLocation; Point upLocation; switch(gestureDirection) { - case DismissDirection.left: + case DismissDirection.endToStart: // getTopRight() returns a point that's just beyond itemWidget's right // edge and outside the Dismissable event listener's bounds. downLocation = tester.getTopRight(itemElement) + const Offset(-0.1, 0.0); upLocation = tester.getTopLeft(itemElement); break; - case DismissDirection.right: + case DismissDirection.startToEnd: // we do the same thing here to keep the test symmetric downLocation = tester.getTopLeft(itemElement) + const Offset(0.1, 0.0); upLocation = tester.getTopRight(itemElement); @@ -129,15 +129,15 @@ void main() { tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); - dismissItem(tester, 0, gestureDirection: DismissDirection.right); + dismissItem(tester, 0, gestureDirection: DismissDirection.startToEnd); expect(tester.findText('0'), isNull); expect(dismissedItems, equals([0])); - expect(reportedDismissDirection, DismissDirection.right); + expect(reportedDismissDirection, DismissDirection.startToEnd); - dismissItem(tester, 1, gestureDirection: DismissDirection.left); + dismissItem(tester, 1, gestureDirection: DismissDirection.endToStart); expect(tester.findText('1'), isNull); expect(dismissedItems, equals([0, 1])); - expect(reportedDismissDirection, DismissDirection.left); + expect(reportedDismissDirection, DismissDirection.endToStart); }); }); @@ -165,38 +165,38 @@ void main() { test('drag-left with DismissDirection.left triggers dismiss', () { testWidgets((WidgetTester tester) { scrollDirection = Axis.vertical; - dismissDirection = DismissDirection.left; + dismissDirection = DismissDirection.endToStart; dismissedItems = []; tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); - dismissItem(tester, 0, gestureDirection: DismissDirection.right); + dismissItem(tester, 0, gestureDirection: DismissDirection.startToEnd); expect(tester.findText('0'), isNotNull); expect(dismissedItems, isEmpty); - dismissItem(tester, 1, gestureDirection: DismissDirection.right); + dismissItem(tester, 1, gestureDirection: DismissDirection.startToEnd); - dismissItem(tester, 0, gestureDirection: DismissDirection.left); + dismissItem(tester, 0, gestureDirection: DismissDirection.endToStart); expect(tester.findText('0'), isNull); expect(dismissedItems, equals([0])); - dismissItem(tester, 1, gestureDirection: DismissDirection.left); + dismissItem(tester, 1, gestureDirection: DismissDirection.endToStart); }); }); test('drag-right with DismissDirection.right triggers dismiss', () { testWidgets((WidgetTester tester) { scrollDirection = Axis.vertical; - dismissDirection = DismissDirection.right; + dismissDirection = DismissDirection.startToEnd; dismissedItems = []; tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); - dismissItem(tester, 0, gestureDirection: DismissDirection.left); + dismissItem(tester, 0, gestureDirection: DismissDirection.endToStart); expect(tester.findText('0'), isNotNull); expect(dismissedItems, isEmpty); - dismissItem(tester, 0, gestureDirection: DismissDirection.right); + dismissItem(tester, 0, gestureDirection: DismissDirection.startToEnd); expect(tester.findText('0'), isNull); expect(dismissedItems, equals([0])); }); @@ -292,12 +292,12 @@ void main() { )); expect(tester.findText('1'), isNotNull); expect(tester.findText('2'), isNotNull); - dismissElement(tester, tester.findText('2'), gestureDirection: DismissDirection.right); + dismissElement(tester, tester.findText('2'), gestureDirection: DismissDirection.startToEnd); tester.pump(); // start the slide away tester.pump(new Duration(seconds: 1)); // finish the slide away expect(tester.findText('1'), isNotNull); expect(tester.findText('2'), isNull); - dismissElement(tester, tester.findText('1'), gestureDirection: DismissDirection.right); + dismissElement(tester, tester.findText('1'), gestureDirection: DismissDirection.startToEnd); tester.pump(); // start the slide away tester.pump(new Duration(seconds: 1)); // finish the slide away (at which point the child is no longer included in the tree) expect(tester.findText('1'), isNull);