mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Add barrierColor property to showCupertinoDialog (#166911)
implimented https://github.com/flutter/flutter/issues/166910 https://github.com/user-attachments/assets/fe9aa2ce-b8a5-4458-b04a-781763959169 ## How to Verify - Set enableDrag: false in CupertinoSheetRoute or showCupertinoSheet. ```diff showCupertinoDialog<void>( context: context, + barrierColor: CupertinoColors.activeOrange.withValues(alpha: 0.5), builder: (BuildContext context) => CupertinoAlertDialog( title: const Text('Alert'), content: const Text('Proceed with destructive action?'), actions: <CupertinoDialogAction>[ CupertinoDialogAction( /// This parameter indicates this action is the default, /// and turns the action's text to bold text. isDefaultAction: true, onPressed: () { Navigator.pop(context); }, child: const Text('No'), ), CupertinoDialogAction( /// This parameter indicates the action would perform /// a destructive action such as deletion, and turns /// the action's text color to red. isDestructiveAction: true, onPressed: () { Navigator.pop(context); }, child: const Text('Yes'), ), ], ), ); ``` - The following is a screenshot of `examples/api/lib/cupertino/dialog/cupertino_alert_dialog.0.dart` after adding `barrierColor: CupertinoColors.activeOrange.withValues(alpha: 0.5),`. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
This commit is contained in:
parent
bc293af1b1
commit
b714d8b34c
@ -1410,6 +1410,7 @@ Future<T?> showCupertinoDialog<T>({
|
||||
required BuildContext context,
|
||||
required WidgetBuilder builder,
|
||||
String? barrierLabel,
|
||||
Color? barrierColor,
|
||||
bool useRootNavigator = true,
|
||||
bool barrierDismissible = false,
|
||||
RouteSettings? routeSettings,
|
||||
@ -1422,7 +1423,7 @@ Future<T?> showCupertinoDialog<T>({
|
||||
context: context,
|
||||
barrierDismissible: barrierDismissible,
|
||||
barrierLabel: barrierLabel,
|
||||
barrierColor: CupertinoDynamicColor.resolve(kCupertinoModalBarrierColor, context),
|
||||
barrierColor: barrierColor,
|
||||
settings: routeSettings,
|
||||
anchorPoint: anchorPoint,
|
||||
requestFocus: requestFocus,
|
||||
|
||||
@ -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: <Widget>[
|
||||
CupertinoButton(
|
||||
child: const Text('Custom BarrierColor'),
|
||||
onPressed: () {
|
||||
showCupertinoDialog<void>(
|
||||
context: context,
|
||||
barrierColor: Colors.red,
|
||||
builder: (BuildContext context) {
|
||||
return CupertinoAlertDialog(
|
||||
title: const Text('Title'),
|
||||
content: const Text('Content'),
|
||||
actions: <Widget>[
|
||||
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<ModalBarrier>(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()),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user