diff --git a/dev/tools/gen_defaults/lib/dialog_template.dart b/dev/tools/gen_defaults/lib/dialog_template.dart
index 9fad9b7..6fe1174 100644
--- a/dev/tools/gen_defaults/lib/dialog_template.dart
+++ b/dev/tools/gen_defaults/lib/dialog_template.dart
@@ -27,11 +27,9 @@
   @override
   Color? get iconColor => _colors.secondary;
 
+  // TODO(darrenaustin): overlay should be handled by Material widget: https://github.com/flutter/flutter/issues/9160
   @override
-  Color? get backgroundColor => ${componentColor("md.comp.dialog.container")};
-
-  @override
-  Color? get surfaceTintColor => ${componentColor("md.comp.dialog.container.surface-tint-layer")};
+  Color? get backgroundColor => ElevationOverlay.colorWithOverlay(${componentColor("md.comp.dialog.container")}, _colors.primary, ${elevation("md.comp.dialog.container")});
 
   @override
   TextStyle? get titleTextStyle => ${textStyle("md.comp.dialog.headline")};
diff --git a/packages/flutter/lib/src/material/dialog.dart b/packages/flutter/lib/src/material/dialog.dart
index 21dd152..a85dd27 100644
--- a/packages/flutter/lib/src/material/dialog.dart
+++ b/packages/flutter/lib/src/material/dialog.dart
@@ -11,6 +11,7 @@
 import 'colors.dart';
 import 'debug.dart';
 import 'dialog_theme.dart';
+import 'elevation_overlay.dart';
 import 'ink_well.dart';
 import 'material.dart';
 import 'material_localizations.dart';
@@ -45,8 +46,6 @@
     super.key,
     this.backgroundColor,
     this.elevation,
-    this.shadowColor,
-    this.surfaceTintColor,
     this.insetAnimationDuration = const Duration(milliseconds: 100),
     this.insetAnimationCurve = Curves.decelerate,
     this.insetPadding = _defaultInsetPadding,
@@ -54,8 +53,7 @@
     this.shape,
     this.alignment,
     this.child,
-  }) : assert(clipBehavior != null),
-       assert(elevation == null || elevation >= 0.0);
+  }) : assert(clipBehavior != null);
 
   /// {@template flutter.material.dialog.backgroundColor}
   /// The background color of the surface of this [Dialog].
@@ -69,53 +67,12 @@
   /// {@template flutter.material.dialog.elevation}
   /// The z-coordinate of this [Dialog].
   ///
-  /// Controls how far above the parent the dialog will appear. Elevation is
-  /// represented by a drop shadow if [shadowColor] is non null,
-  /// and a surface tint overlay on the background color if [surfaceTintColor] is
-  /// non null.
-  ///
-  /// If null then [DialogTheme.elevation] is used, and if that is null then
-  /// the elevation will match the Material Design specification for Dialogs.
-  ///
-  /// See also:
-  ///   * [Material.elevation], which describes how [elevation] effects the
-  ///     drop shadow or surface tint overlay.
-  ///   * [shadowColor], color of the drop shadow used to indicate the elevation.
-  ///   * [surfaceTintColor], color of an overlay on top of the background
-  ///     color used to indicate the elevation.
-  ///   * <https://m3.material.io/components/dialogs/overview>, the Material
-  ///     Design specification for dialogs.
+  /// If null then [DialogTheme.elevation] is used, and if that's null then the
+  /// dialog's elevation is 24.0.
   /// {@endtemplate}
+  /// {@macro flutter.material.material.elevation}
   final double? elevation;
 
-  /// {@template flutter.material.dialog.shadowColor}
-  /// The color to paint the [elevation] shadow under the dialog's [Material].
-  ///
-  /// If null then no drop shadow will be painted.
-  ///
-  /// See also:
-  ///   * [Material.shadowColor], which describes how the drop shadow is painted.
-  ///   * [elevation], effects how the drop shadow is painted.
-  ///   * [surfaceTintColor], if non-null will also provide a surface tint
-  ///     overlay on the background color to indicate elevation.
-  /// {@endtemplate}
-  final Color? shadowColor;
-
-  /// {@template flutter.material.dialog.surfaceTintColor}
-  /// The color used as a surface tint overlay on the dialog's background color,
-  /// which reflects the dialog's [elevation].
-  ///
-  /// If null then no surface tint will be applied.
-  ///
-  /// See also:
-  ///   * [Material.surfaceTintColor], which describes how the surface tint will
-  ///     be applied to the background color of the dialog.
-  ///   * [elevation], effects the opacity of the surface tint.
-  ///   * [shadowColor], if non-null will also provide a drop shadow to
-  ///     indicate elevation.
-  /// {@endtemplate}
-  final Color? surfaceTintColor;
-
   /// {@template flutter.material.dialog.insetAnimationDuration}
   /// The duration of the animation to show when the system keyboard intrudes
   /// into the space that the dialog is placed in.
@@ -198,8 +155,6 @@
             child: Material(
               color: backgroundColor ?? dialogTheme.backgroundColor ?? Theme.of(context).dialogBackgroundColor,
               elevation: elevation ?? dialogTheme.elevation ?? defaults.elevation!,
-              shadowColor: shadowColor ?? dialogTheme.shadowColor ?? defaults.shadowColor,
-              surfaceTintColor: surfaceTintColor ?? dialogTheme.surfaceTintColor ?? defaults.surfaceTintColor,
               shape: shape ?? dialogTheme.shape ?? defaults.shape!,
               type: MaterialType.card,
               clipBehavior: clipBehavior,
@@ -325,8 +280,6 @@
     this.buttonPadding,
     this.backgroundColor,
     this.elevation,
-    this.shadowColor,
-    this.surfaceTintColor,
     this.semanticLabel,
     this.insetPadding = _defaultInsetPadding,
     this.clipBehavior = Clip.none,
@@ -525,14 +478,9 @@
   final Color? backgroundColor;
 
   /// {@macro flutter.material.dialog.elevation}
+  /// {@macro flutter.material.material.elevation}
   final double? elevation;
 
-  /// {@macro flutter.material.dialog.shadowColor}
-  final Color? shadowColor;
-
-  /// {@macro flutter.material.dialog.surfaceTintColor}
-  final Color? surfaceTintColor;
-
   /// The semantic label of the dialog used by accessibility frameworks to
   /// announce screen transitions when the dialog is opened and closed.
   ///
@@ -747,8 +695,6 @@
     return Dialog(
       backgroundColor: backgroundColor,
       elevation: elevation,
-      shadowColor: shadowColor,
-      surfaceTintColor: surfaceTintColor,
       insetPadding: insetPadding,
       clipBehavior: clipBehavior,
       shape: shape,
@@ -914,8 +860,6 @@
     this.contentPadding = const EdgeInsets.fromLTRB(0.0, 12.0, 0.0, 16.0),
     this.backgroundColor,
     this.elevation,
-    this.shadowColor,
-    this.surfaceTintColor,
     this.semanticLabel,
     this.insetPadding = _defaultInsetPadding,
     this.clipBehavior = Clip.none,
@@ -971,14 +915,9 @@
   final Color? backgroundColor;
 
   /// {@macro flutter.material.dialog.elevation}
+  /// {@macro flutter.material.material.elevation}
   final double? elevation;
 
-  /// {@macro flutter.material.dialog.shadowColor}
-  final Color? shadowColor;
-
-  /// {@macro flutter.material.dialog.surfaceTintColor}
-  final Color? surfaceTintColor;
-
   /// The semantic label of the dialog used by accessibility frameworks to
   /// announce screen transitions when the dialog is opened and closed.
   ///
@@ -1092,8 +1031,6 @@
     return Dialog(
       backgroundColor: backgroundColor,
       elevation: elevation,
-      shadowColor: shadowColor,
-      surfaceTintColor: surfaceTintColor,
       insetPadding: insetPadding,
       clipBehavior: clipBehavior,
       shape: shape,
@@ -1360,9 +1297,6 @@
   Color? get backgroundColor => Theme.of(context).dialogBackgroundColor;
 
   @override
-  Color? get shadowColor => Theme.of(context).shadowColor;
-
-  @override
   TextStyle? get titleTextStyle => _textTheme.headline6;
 
   @override
@@ -1396,11 +1330,9 @@
   @override
   Color? get iconColor => _colors.secondary;
 
+  // TODO(darrenaustin): overlay should be handled by Material widget: https://github.com/flutter/flutter/issues/9160
   @override
-  Color? get backgroundColor => _colors.surface;
-
-  @override
-  Color? get surfaceTintColor => _colors.surfaceTint;
+  Color? get backgroundColor => ElevationOverlay.colorWithOverlay(_colors.surface, _colors.primary, 6.0);
 
   @override
   TextStyle? get titleTextStyle => _textTheme.headlineSmall;
diff --git a/packages/flutter/lib/src/material/dialog_theme.dart b/packages/flutter/lib/src/material/dialog_theme.dart
index a53afee..b3c7cd3 100644
--- a/packages/flutter/lib/src/material/dialog_theme.dart
+++ b/packages/flutter/lib/src/material/dialog_theme.dart
@@ -30,8 +30,6 @@
   const DialogTheme({
     this.backgroundColor,
     this.elevation,
-    this.shadowColor,
-    this.surfaceTintColor,
     this.shape,
     this.alignment,
     this.iconColor,
@@ -46,12 +44,6 @@
   /// Overrides the default value for [Dialog.elevation].
   final double? elevation;
 
-  /// Overrides the default value for [Dialog.shadowColor].
-  final Color? shadowColor;
-
-  /// Overrides the default value for [Dialog.surfaceTintColor].
-  final Color? surfaceTintColor;
-
   /// Overrides the default value for [Dialog.shape].
   final ShapeBorder? shape;
 
@@ -77,8 +69,6 @@
   DialogTheme copyWith({
     Color? backgroundColor,
     double? elevation,
-    Color? shadowColor,
-    Color? surfaceTintColor,
     ShapeBorder? shape,
     AlignmentGeometry? alignment,
     Color? iconColor,
@@ -89,8 +79,6 @@
     return DialogTheme(
       backgroundColor: backgroundColor ?? this.backgroundColor,
       elevation: elevation ?? this.elevation,
-      shadowColor: shadowColor ?? this.shadowColor,
-      surfaceTintColor: surfaceTintColor ?? this.surfaceTintColor,
       shape: shape ?? this.shape,
       alignment: alignment ?? this.alignment,
       iconColor: iconColor ?? this.iconColor,
@@ -115,8 +103,6 @@
     return DialogTheme(
       backgroundColor: Color.lerp(a?.backgroundColor, b?.backgroundColor, t),
       elevation: lerpDouble(a?.elevation, b?.elevation, t),
-      shadowColor: Color.lerp(a?.shadowColor, b?.shadowColor, t),
-      surfaceTintColor: Color.lerp(a?.surfaceTintColor, b?.surfaceTintColor, t),
       shape: ShapeBorder.lerp(a?.shape, b?.shape, t),
       alignment: AlignmentGeometry.lerp(a?.alignment, b?.alignment, t),
       iconColor: Color.lerp(a?.iconColor, b?.iconColor, t),
@@ -140,8 +126,6 @@
     return other is DialogTheme
         && other.backgroundColor == backgroundColor
         && other.elevation == elevation
-        && other.shadowColor == shadowColor
-        && other.surfaceTintColor == surfaceTintColor
         && other.shape == shape
         && other.alignment == alignment
         && other.iconColor == iconColor
@@ -155,8 +139,6 @@
     super.debugFillProperties(properties);
     properties.add(ColorProperty('backgroundColor', backgroundColor));
     properties.add(DoubleProperty('elevation', elevation));
-    properties.add(ColorProperty('shadowColor', shadowColor));
-    properties.add(ColorProperty('surfaceTintColor', surfaceTintColor));
     properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: null));
     properties.add(DiagnosticsProperty<AlignmentGeometry>('alignment', alignment, defaultValue: null));
     properties.add(ColorProperty('iconColor', iconColor));
diff --git a/packages/flutter/test/material/dialog_test.dart b/packages/flutter/test/material/dialog_test.dart
index 63bf9a2..f71677c 100644
--- a/packages/flutter/test/material/dialog_test.dart
+++ b/packages/flutter/test/material/dialog_test.dart
@@ -140,13 +140,9 @@
 
   testWidgets('Custom dialog elevation', (WidgetTester tester) async {
     const double customElevation = 12.0;
-    const Color shadowColor = Color(0xFF000001);
-    const Color surfaceTintColor = Color(0xFF000002);
     const AlertDialog dialog = AlertDialog(
       actions: <Widget>[ ],
       elevation: customElevation,
-      shadowColor: shadowColor,
-      surfaceTintColor: surfaceTintColor,
     );
     await tester.pumpWidget(_buildAppWithDialog(dialog));
 
@@ -155,8 +151,6 @@
 
     final Material materialWidget = _getMaterialFromDialog(tester);
     expect(materialWidget.elevation, customElevation);
-    expect(materialWidget.shadowColor, shadowColor);
-    expect(materialWidget.surfaceTintColor, surfaceTintColor);
   });
 
   testWidgets('Custom Title Text Style', (WidgetTester tester) async {
diff --git a/packages/flutter/test/material/dialog_theme_test.dart b/packages/flutter/test/material/dialog_theme_test.dart
index 54bdf92..5666af4 100644
--- a/packages/flutter/test/material/dialog_theme_test.dart
+++ b/packages/flutter/test/material/dialog_theme_test.dart
@@ -51,8 +51,6 @@
     const DialogTheme(
       backgroundColor: Color(0xff123456),
       elevation: 8.0,
-      shadowColor: Color(0xff000001),
-      surfaceTintColor: Color(0xff000002),
       alignment: Alignment.bottomLeft,
       iconColor: Color(0xff654321),
       titleTextStyle: TextStyle(color: Color(0xffffffff)),
@@ -65,8 +63,6 @@
     expect(description, <String>[
       'backgroundColor: Color(0xff123456)',
       'elevation: 8.0',
-      'shadowColor: Color(0xff000001)',
-      'surfaceTintColor: Color(0xff000002)',
       'alignment: Alignment.bottomLeft',
       'iconColor: Color(0xff654321)',
       'titleTextStyle: TextStyle(inherit: true, color: Color(0xffffffff))',
@@ -93,19 +89,11 @@
 
   testWidgets('Custom dialog elevation', (WidgetTester tester) async {
     const double customElevation = 12.0;
-    const Color shadowColor = Color(0xFF000001);
-    const Color surfaceTintColor = Color(0xFF000002);
     const AlertDialog dialog = AlertDialog(
       title: Text('Title'),
       actions: <Widget>[ ],
     );
-    final ThemeData theme = ThemeData(
-      dialogTheme: const DialogTheme(
-        elevation: customElevation,
-        shadowColor: shadowColor,
-        surfaceTintColor: surfaceTintColor,
-      ),
-    );
+    final ThemeData theme = ThemeData(dialogTheme: const DialogTheme(elevation: customElevation));
 
     await tester.pumpWidget(
       _appWithDialog(tester, dialog, theme: theme),
@@ -115,8 +103,6 @@
 
     final Material materialWidget = _getMaterialFromDialog(tester);
     expect(materialWidget.elevation, customElevation);
-    expect(materialWidget.shadowColor, shadowColor);
-    expect(materialWidget.surfaceTintColor, surfaceTintColor);
   });
 
   testWidgets('Custom dialog shape', (WidgetTester tester) async {
