diff --git a/packages/flutter/lib/src/cupertino/route.dart b/packages/flutter/lib/src/cupertino/route.dart index fdfe92b074200..436acb25bf0bf 100644 --- a/packages/flutter/lib/src/cupertino/route.dart +++ b/packages/flutter/lib/src/cupertino/route.dart @@ -1410,6 +1410,7 @@ Future showCupertinoDialog({ required BuildContext context, required WidgetBuilder builder, String? barrierLabel, + Color? barrierColor, bool useRootNavigator = true, bool barrierDismissible = false, RouteSettings? routeSettings, @@ -1422,7 +1423,7 @@ Future showCupertinoDialog({ context: context, barrierDismissible: barrierDismissible, barrierLabel: barrierLabel, - barrierColor: CupertinoDynamicColor.resolve(kCupertinoModalBarrierColor, context), + barrierColor: barrierColor, settings: routeSettings, anchorPoint: anchorPoint, requestFocus: requestFocus, diff --git a/packages/flutter/test/cupertino/dialog_test.dart b/packages/flutter/test/cupertino/dialog_test.dart index d3971ca8b13f8..b578c5f1f1aa6 100644 --- a/packages/flutter/test/cupertino/dialog_test.dart +++ b/packages/flutter/test/cupertino/dialog_test.dart @@ -1737,6 +1737,60 @@ void main() { semantics.dispose(); }); + testWidgets('showCupertinoDialog - custom barrierColor', (WidgetTester tester) async { + await tester.pumpWidget( + CupertinoApp( + home: Builder( + builder: (BuildContext context) { + return Center( + child: Column( + children: [ + CupertinoButton( + child: const Text('Custom BarrierColor'), + onPressed: () { + showCupertinoDialog( + context: context, + barrierColor: Colors.red, + builder: (BuildContext context) { + return CupertinoAlertDialog( + title: const Text('Title'), + content: const Text('Content'), + actions: [ + const CupertinoDialogAction(child: Text('Yes')), + CupertinoDialogAction( + child: const Text('No'), + onPressed: () { + Navigator.pop(context); + }, + ), + ], + ); + }, + ); + }, + ), + ], + ), + ); + }, + ), + ), + ); + + await tester.tap(find.text('Custom BarrierColor')); + await tester.pumpAndSettle(); + expect(tester.widget(find.byType(ModalBarrier).last).color, equals(Colors.red)); + + await tester.tap(find.text('No')); + await tester.pumpAndSettle(); + expect( + find.byWidgetPredicate( + (Widget widget) => widget is ModalBarrier && widget.color == Colors.red, + ), + findsNothing, + ); + }); + testWidgets('CupertinoDialogRoute is state restorable', (WidgetTester tester) async { await tester.pumpWidget( const CupertinoApp(restorationScopeId: 'app', home: _RestorableDialogTestWidget()),