diff --git a/packages/flutter/lib/src/cupertino/page.dart b/packages/flutter/lib/src/cupertino/page.dart index fbe57df36a..86efab11d1 100644 --- a/packages/flutter/lib/src/cupertino/page.dart +++ b/packages/flutter/lib/src/cupertino/page.dart @@ -450,10 +450,15 @@ class _CupertinoBackGestureDetectorState extends State<_CupertinoBackGestureDete fit: StackFit.passthrough, children: [ widget.child, - new Listener( - onPointerDown: _handlePointerDown, - behavior: HitTestBehavior.translucent, - child: new SizedBox(width: _kBackGestureWidth), + new Positioned( + left: 0.0, + width: _kBackGestureWidth, + top: 0.0, + bottom: 0.0, + child: new Listener( + onPointerDown: _handlePointerDown, + behavior: HitTestBehavior.translucent, + ), ), ], ); diff --git a/packages/flutter/test/cupertino/page_test.dart b/packages/flutter/test/cupertino/page_test.dart index 56ea3da1b3..2a9060f7ea 100644 --- a/packages/flutter/test/cupertino/page_test.dart +++ b/packages/flutter/test/cupertino/page_test.dart @@ -141,4 +141,48 @@ void main() { // Page 1 is back where it started. expect(widget1InitialTopLeft == widget1TransientTopLeft, true); }); -} \ No newline at end of file + + testWidgets('test only edge swipes work', (WidgetTester tester) async { + await tester.pumpWidget( + new WidgetsApp( + color: const Color(0xFFFFFFFF), + onGenerateRoute: (RouteSettings settings) { + return new CupertinoPageRoute( + settings: settings, + builder: (BuildContext context) { + final String pageNumber = settings.name == '/' ? "1" : "2"; + return new Center(child: new Text('Page $pageNumber')); + } + ); + }, + ), + ); + + tester.state(find.byType(Navigator)).pushNamed('/next'); + + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + + // Page 2 covers page 1. + expect(find.text('Page 1'), findsNothing); + expect(find.text('Page 2'), isOnstage); + + // Drag from the middle to the right. + TestGesture gesture = await tester.startGesture(const Offset(200.0, 200.0)); + await gesture.moveBy(const Offset(300.0, 0.0)); + await tester.pump(); + + // Nothing should happen. + expect(find.text('Page 1'), findsNothing); + expect(find.text('Page 2'), isOnstage); + + // Now drag from the edge. + gesture = await tester.startGesture(const Offset(5.0, 200.0)); + await gesture.moveBy(const Offset(300.0, 0.0)); + await tester.pump(); + + // Page 1 is now visible. + expect(find.text('Page 1'), isOnstage); + expect(find.text('Page 2'), isOnstage); + }); +}