diff --git a/packages/flutter/lib/src/widgets/routes.dart b/packages/flutter/lib/src/widgets/routes.dart index 7fe9c8ff46..8537d71d7f 100644 --- a/packages/flutter/lib/src/widgets/routes.dart +++ b/packages/flutter/lib/src/widgets/routes.dart @@ -1799,10 +1799,10 @@ class _DialogRoute extends PopupRoute { Future showGeneralDialog({ @required BuildContext context, @required RoutePageBuilder pageBuilder, - bool barrierDismissible, + bool barrierDismissible = false, String barrierLabel, - Color barrierColor, - Duration transitionDuration, + Color barrierColor = const Color(0x80000000), + Duration transitionDuration = const Duration(milliseconds: 200), RouteTransitionsBuilder transitionBuilder, bool useRootNavigator = true, RouteSettings routeSettings, diff --git a/packages/flutter/test/widgets/routes_test.dart b/packages/flutter/test/widgets/routes_test.dart index 373f78f94b..0e5d2a89aa 100644 --- a/packages/flutter/test/widgets/routes_test.dart +++ b/packages/flutter/test/widgets/routes_test.dart @@ -1041,6 +1041,41 @@ void main() { expect(nestedObserver.dialogCount, 1); }); + testWidgets('showGeneralDialog default argument values', (WidgetTester tester) async { + final DialogObserver rootObserver = DialogObserver(); + + await tester.pumpWidget(MaterialApp( + navigatorObservers: [rootObserver], + home: Navigator( + onGenerateRoute: (RouteSettings settings) { + return MaterialPageRoute( + builder: (BuildContext context) { + return RaisedButton( + onPressed: () { + showGeneralDialog( + context: context, + pageBuilder: (BuildContext innerContext, _, __) { + return const SizedBox(); + }, + ); + }, + child: const Text('Show Dialog'), + ); + }, + ); + }, + ), + )); + + // Open the dialog. + await tester.tap(find.byType(RaisedButton)); + expect(rootObserver.dialogRoutes.length, equals(1)); + final ModalRoute route = rootObserver.dialogRoutes.last; + expect(route.barrierDismissible, isNotNull); + expect(route.barrierColor, isNotNull); + expect(route.transitionDuration, isNotNull); + }); + testWidgets('reverseTransitionDuration defaults to transitionDuration', (WidgetTester tester) async { final GlobalKey containerKey = GlobalKey(); @@ -1598,15 +1633,26 @@ class TestPageRouteBuilder extends PageRouteBuilder { } class DialogObserver extends NavigatorObserver { + final List> dialogRoutes = >[]; int dialogCount = 0; @override void didPush(Route route, Route previousRoute) { if (route.toString().contains('_DialogRoute')) { + dialogRoutes.add(route as ModalRoute); dialogCount++; } super.didPush(route, previousRoute); } + + @override + void didPop(Route route, Route previousRoute) { + if (route.toString().contains('_DialogRoute')) { + dialogRoutes.removeLast(); + dialogCount--; + } + super.didPop(route, previousRoute); + } } class _TestDialogRouteWithCustomBarrierCurve extends PopupRoute {