diff --git a/packages/flutter/lib/src/cupertino/route.dart b/packages/flutter/lib/src/cupertino/route.dart index 218d6fe6f3..6b91cfa246 100644 --- a/packages/flutter/lib/src/cupertino/route.dart +++ b/packages/flutter/lib/src/cupertino/route.dart @@ -176,11 +176,6 @@ class CupertinoPageRoute extends PageRoute { @override String get barrierLabel => null; - @override - bool canTransitionFrom(TransitionRoute previousRoute) { - return previousRoute is CupertinoPageRoute; - } - @override bool canTransitionTo(TransitionRoute nextRoute) { // Don't perform outgoing animation if the next route is a fullscreen dialog. diff --git a/packages/flutter/lib/src/material/page.dart b/packages/flutter/lib/src/material/page.dart index 1116fdf936..e97df68c79 100644 --- a/packages/flutter/lib/src/material/page.dart +++ b/packages/flutter/lib/src/material/page.dart @@ -66,11 +66,6 @@ class MaterialPageRoute extends PageRoute { @override String get barrierLabel => null; - @override - bool canTransitionFrom(TransitionRoute previousRoute) { - return previousRoute is MaterialPageRoute || previousRoute is CupertinoPageRoute; - } - @override bool canTransitionTo(TransitionRoute nextRoute) { // Don't perform outgoing animation if the next route is a fullscreen dialog. diff --git a/packages/flutter/test/material/page_test.dart b/packages/flutter/test/material/page_test.dart index 82da1b633f..47fbded3a6 100644 --- a/packages/flutter/test/material/page_test.dart +++ b/packages/flutter/test/material/page_test.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart' show CupertinoPageRoute; import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -785,4 +786,32 @@ void main() { expect(homeTapCount, 2); expect(pageTapCount, 1); }); + + testWidgets('On iOS, a MaterialPageRoute should slide out with CupertinoPageTransition when a compatible PageRoute is pushed on top of it', (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/44864. + + await tester.pumpWidget( + MaterialApp( + theme: ThemeData(platform: TargetPlatform.iOS), + home: Scaffold( + appBar: AppBar(title: const Text('Title')), + ), + ), + ); + + final Offset titleInitialTopLeft = tester.getTopLeft(find.text('Title')); + + tester.state(find.byType(Navigator)).push( + CupertinoPageRoute(builder: (BuildContext context) => const Placeholder()), + ); + + await tester.pump(); + await tester.pump(const Duration(milliseconds: 150)); + + final Offset titleTransientTopLeft = tester.getTopLeft(find.text('Title')); + + // Title of the first route slides to the left. + expect(titleInitialTopLeft.dy, equals(titleTransientTopLeft.dy)); + expect(titleInitialTopLeft.dx, greaterThan(titleTransientTopLeft.dx)); + }); }