Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion packages/material_ui/lib/src/bottom_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1342,7 +1342,10 @@ Future<T?> showModalBottomSheet<T>({
clipBehavior: clipBehavior,
constraints: constraints,
isDismissible: isDismissible,
modalBarrierColor: barrierColor ?? Theme.of(context).bottomSheetTheme.modalBarrierColor,
modalBarrierColor:
barrierColor ??
Theme.of(context).bottomSheetTheme.modalBarrierColor ??
Theme.of(context).colorScheme.scrim.withValues(alpha: Colors.black54.a),
enableDrag: enableDrag,
showDragHandle: showDragHandle,
settings: routeSettings,
Expand Down
2 changes: 1 addition & 1 deletion packages/material_ui/lib/src/dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1706,7 +1706,7 @@ Future<T?> showDialog<T>({
barrierColor ??
DialogTheme.of(context).barrierColor ??
Theme.of(context).dialogTheme.barrierColor ??
Colors.black54,
Theme.of(context).colorScheme.scrim.withValues(alpha: Colors.black54.a),
barrierDismissible: barrierDismissible,
barrierLabel: barrierLabel,
useSafeArea: useSafeArea,
Expand Down
4 changes: 3 additions & 1 deletion packages/material_ui/lib/src/drawer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,9 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
};

final Color scrimColor =
widget.scrimColor ?? DrawerTheme.of(context).scrimColor ?? Colors.black54;
widget.scrimColor ??
DrawerTheme.of(context).scrimColor ??
Theme.of(context).colorScheme.scrim.withValues(alpha: Colors.black54.a);
final Color effectiveScrimColor = scrimColor.withValues(
alpha: scrimColor.a * _controller.value,
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
changelog: |
- Fixes `Drawer`, `showModalBottomSheet`, and `showDialog` ignoring a custom `ColorScheme.scrim` and always using `Colors.black54` for their scrim/barrier.
version: patch
31 changes: 31 additions & 0 deletions packages/material_ui/test/bottom_sheet_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1018,6 +1018,37 @@ void main() {
expect(modalBarrier.color, barrierColor);
});

testWidgets('Modal barrier color respects ColorScheme.scrim when not overridden', (
WidgetTester tester,
) async {
final scaffoldKey = GlobalKey<ScaffoldState>();

await tester.pumpWidget(
MaterialApp(
theme: ThemeData(colorScheme: const ColorScheme.light(scrim: Colors.red)),
home: Scaffold(
key: scaffoldKey,
body: const Center(child: Text('body')),
),
),
);

unawaited(
showModalBottomSheet<void>(
context: scaffoldKey.currentContext!,
builder: (BuildContext context) {
return const Text('BottomSheet');
},
),
);

await tester.pump();
await tester.pump(const Duration(seconds: 1));

final ModalBarrier modalBarrier = tester.widget(find.byType(ModalBarrier).last);
expect(modalBarrier.color, isSameColorAs(Colors.red.withValues(alpha: Colors.black54.a)));
});

testWidgets('Material3 - BottomSheet uses fallback values', (WidgetTester tester) async {
const Color surfaceColor = Colors.pink;
const Color surfaceTintColor = Colors.blue;
Expand Down
26 changes: 26 additions & 0 deletions packages/material_ui/test/dialog_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,32 @@ void main() {
expect(tester.widget<ModalBarrier>(find.byType(ModalBarrier).last).color, Colors.pink);
});

testWidgets('Barrier color respects ColorScheme.scrim when not overridden', (
WidgetTester tester,
) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeData(colorScheme: const ColorScheme.light(scrim: Colors.red)),
home: const Center(child: Text('Test')),
),
);
final BuildContext context = tester.element(find.text('Test'));

unawaited(
showDialog<void>(
context: context,
builder: (BuildContext context) {
return const Text('Dialog');
},
),
);
await tester.pumpAndSettle();
expect(
tester.widget<ModalBarrier>(find.byType(ModalBarrier).last).color,
isSameColorAs(Colors.red.withValues(alpha: Colors.black54.a)),
);
});

testWidgets('Dialog hides underlying semantics tree', (WidgetTester tester) async {
final semantics = SemanticsTester(tester);
const buttonText = 'A button covered by dialog overlay';
Expand Down
30 changes: 30 additions & 0 deletions packages/material_ui/test/drawer_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,36 @@ void main() {
await checkScrim(const Color(0xFF323232));
});

testWidgets('Drawer scrim respects ColorScheme.scrim when not overridden', (
WidgetTester tester,
) async {
Widget getScrim() {
return tester
.widget<Semantics>(
find.descendant(
of: find.byType(DrawerController),
matching: find.byWidgetPredicate((Widget widget) {
return widget is Semantics && widget.properties.label == 'Dismiss';
}),
),
)
.child!;
}

final scaffoldKey = GlobalKey<ScaffoldState>();
await tester.pumpWidget(
MaterialApp(
theme: ThemeData(colorScheme: const ColorScheme.light(scrim: Colors.red)),
home: Scaffold(key: scaffoldKey, drawer: const Drawer()),
),
);

scaffoldKey.currentState!.openDrawer();
await tester.pumpAndSettle();
final scrim = getScrim() as ColoredBox;
expect(scrim.color, isSameColorAs(Colors.red.withValues(alpha: Colors.black54.a)));
});

testWidgets('Open/close drawers by flinging', (WidgetTester tester) async {
await tester.pumpWidget(
const MaterialApp(
Expand Down