From 964dc1fc30789d3fd2ff40ef810dffde41e27add Mon Sep 17 00:00:00 2001 From: imzyy Date: Wed, 25 Sep 2019 07:54:44 +0800 Subject: [PATCH] Add fullscreenDialog argument in PageRouteBuilder (#40161) --- packages/flutter/lib/src/widgets/pages.dart | 8 ++++--- .../flutter/test/material/scaffold_test.dart | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/flutter/lib/src/widgets/pages.dart b/packages/flutter/lib/src/widgets/pages.dart index f79ee0c45c8..36282e9c0f9 100644 --- a/packages/flutter/lib/src/widgets/pages.dart +++ b/packages/flutter/lib/src/widgets/pages.dart @@ -56,7 +56,7 @@ class PageRouteBuilder extends PageRoute { /// Creates a route that delegates to builder callbacks. /// /// The [pageBuilder], [transitionsBuilder], [opaque], [barrierDismissible], - /// and [maintainState] arguments must not be null. + /// [maintainState], and [fullscreenDialog] arguments must not be null. PageRouteBuilder({ RouteSettings settings, @required this.pageBuilder, @@ -67,12 +67,14 @@ class PageRouteBuilder extends PageRoute { this.barrierColor, this.barrierLabel, this.maintainState = true, + bool fullscreenDialog = false, }) : assert(pageBuilder != null), assert(transitionsBuilder != null), + assert(opaque != null), assert(barrierDismissible != null), assert(maintainState != null), - assert(opaque != null), - super(settings: settings); + assert(fullscreenDialog != null), + super(settings: settings, fullscreenDialog: fullscreenDialog); /// Used build the route's primary contents. /// diff --git a/packages/flutter/test/material/scaffold_test.dart b/packages/flutter/test/material/scaffold_test.dart index b72843d8346..123b07bce3f 100644 --- a/packages/flutter/test/material/scaffold_test.dart +++ b/packages/flutter/test/material/scaffold_test.dart @@ -568,6 +568,15 @@ void main() { ); } + PageRoute pageRouteBuilder() { + return PageRouteBuilder( + pageBuilder: (BuildContext context, Animation animation, Animation secondaryAnimation) { + return Scaffold(appBar: AppBar(), body: const Text('Page 2')); + }, + fullscreenDialog: true, + ); + } + PageRoute customPageRouteBuilder() { return _CustomPageRoute( builder: (BuildContext context) { @@ -589,6 +598,18 @@ void main() { await expectCloseIcon(tester, TargetPlatform.iOS, Icons.close, materialRouteBuilder); }); + testWidgets('Close button shows correctly with PageRouteBuilder on Android', (WidgetTester tester) async { + await expectCloseIcon(tester, TargetPlatform.android, Icons.close, pageRouteBuilder); + }); + + testWidgets('Close button shows correctly with PageRouteBuilder on Fuchsia', (WidgetTester tester) async { + await expectCloseIcon(tester, TargetPlatform.fuchsia, Icons.close, pageRouteBuilder); + }); + + testWidgets('Close button shows correctly with PageRouteBuilder on iOS', (WidgetTester tester) async { + await expectCloseIcon(tester, TargetPlatform.iOS, Icons.close, pageRouteBuilder); + }); + testWidgets('Close button shows correctly with custom page route on Android', (WidgetTester tester) async { await expectCloseIcon(tester, TargetPlatform.android, Icons.close, customPageRouteBuilder); });