diff --git a/dev/tools/gen_defaults/lib/dialog_template.dart b/dev/tools/gen_defaults/lib/dialog_template.dart index 62d5ab29b308..edeb132dab72 100644 --- a/dev/tools/gen_defaults/lib/dialog_template.dart +++ b/dev/tools/gen_defaults/lib/dialog_template.dart @@ -34,6 +34,9 @@ class _TokenDefaultsM3 extends DialogTheme { @override TextStyle? get contentTextStyle => ${textStyle("md.comp.dialog.supporting-text")}; + + @override + EdgeInsetsGeometry? get actionsPadding => const EdgeInsets.only(left: 24.0, right: 24.0, bottom: 24.0); } '''; } diff --git a/packages/flutter/lib/src/material/dialog.dart b/packages/flutter/lib/src/material/dialog.dart index 90fc84270a31..38786c3467c9 100644 --- a/packages/flutter/lib/src/material/dialog.dart +++ b/packages/flutter/lib/src/material/dialog.dart @@ -555,11 +555,10 @@ class AlertDialog extends StatelessWidget { if (actions != null) { final double spacing = (buttonPadding?.horizontal ?? 16) / 2; - final EdgeInsetsGeometry effetiveActionsPadding = (actionsPadding ?? EdgeInsets.zero).add( - theme.useMaterial3 ? const EdgeInsets.only(left: 24.0, right: 24.0, bottom: 24.0) : EdgeInsets.all(spacing), - ); actionsWidget = Padding( - padding: effetiveActionsPadding, + padding: actionsPadding ?? dialogTheme.actionsPadding ?? ( + theme.useMaterial3 ? defaults.actionsPadding! : defaults.actionsPadding!.add(EdgeInsets.all(spacing)) + ), child: OverflowBar( alignment: actionsAlignment ?? MainAxisAlignment.end, spacing: spacing, @@ -1205,6 +1204,9 @@ class _DefaultsM2 extends DialogTheme { @override TextStyle? get contentTextStyle => _textTheme.subtitle1; + + @override + EdgeInsetsGeometry? get actionsPadding => EdgeInsets.zero; } // BEGIN GENERATED TOKEN PROPERTIES @@ -1235,6 +1237,9 @@ class _TokenDefaultsM3 extends DialogTheme { @override TextStyle? get contentTextStyle => _textTheme.bodyMedium; + + @override + EdgeInsetsGeometry? get actionsPadding => const EdgeInsets.only(left: 24.0, right: 24.0, bottom: 24.0); } // END GENERATED TOKEN PROPERTIES diff --git a/packages/flutter/lib/src/material/dialog_theme.dart b/packages/flutter/lib/src/material/dialog_theme.dart index aa93e68943c5..d18aa64947a6 100644 --- a/packages/flutter/lib/src/material/dialog_theme.dart +++ b/packages/flutter/lib/src/material/dialog_theme.dart @@ -34,6 +34,7 @@ class DialogTheme with Diagnosticable { this.alignment, this.titleTextStyle, this.contentTextStyle, + this.actionsPadding, }); /// Overrides the default value for [Dialog.backgroundColor]. @@ -56,6 +57,9 @@ class DialogTheme with Diagnosticable { /// [AlertDialog.content]. final TextStyle? contentTextStyle; + /// Overrides the default value for [AlertDialog.actionsPadding]. + final EdgeInsetsGeometry? actionsPadding; + /// Creates a copy of this object but with the given fields replaced with the /// new values. DialogTheme copyWith({ @@ -65,6 +69,7 @@ class DialogTheme with Diagnosticable { AlignmentGeometry? alignment, TextStyle? titleTextStyle, TextStyle? contentTextStyle, + EdgeInsetsGeometry? actionsPadding, }) { return DialogTheme( backgroundColor: backgroundColor ?? this.backgroundColor, @@ -73,6 +78,7 @@ class DialogTheme with Diagnosticable { alignment: alignment ?? this.alignment, titleTextStyle: titleTextStyle ?? this.titleTextStyle, contentTextStyle: contentTextStyle ?? this.contentTextStyle, + actionsPadding: actionsPadding ?? this.actionsPadding, ); } @@ -95,6 +101,7 @@ class DialogTheme with Diagnosticable { alignment: AlignmentGeometry.lerp(a?.alignment, b?.alignment, t), titleTextStyle: TextStyle.lerp(a?.titleTextStyle, b?.titleTextStyle, t), contentTextStyle: TextStyle.lerp(a?.contentTextStyle, b?.contentTextStyle, t), + actionsPadding: EdgeInsetsGeometry.lerp(a?.actionsPadding, b?.actionsPadding, t), ); } @@ -115,7 +122,8 @@ class DialogTheme with Diagnosticable { && other.shape == shape && other.alignment == alignment && other.titleTextStyle == titleTextStyle - && other.contentTextStyle == contentTextStyle; + && other.contentTextStyle == contentTextStyle + && other.actionsPadding == actionsPadding; } @override @@ -127,5 +135,6 @@ class DialogTheme with Diagnosticable { properties.add(DiagnosticsProperty('alignment', alignment, defaultValue: null)); properties.add(DiagnosticsProperty('titleTextStyle', titleTextStyle, defaultValue: null)); properties.add(DiagnosticsProperty('contentTextStyle', contentTextStyle, defaultValue: null)); + properties.add(DiagnosticsProperty('actionsPadding', actionsPadding, defaultValue: null)); } } diff --git a/packages/flutter/test/material/dialog_theme_test.dart b/packages/flutter/test/material/dialog_theme_test.dart index a9d573e9b91b..7380f206980e 100644 --- a/packages/flutter/test/material/dialog_theme_test.dart +++ b/packages/flutter/test/material/dialog_theme_test.dart @@ -54,6 +54,7 @@ void main() { alignment: Alignment.bottomLeft, titleTextStyle: TextStyle(color: Color(0xffffffff)), contentTextStyle: TextStyle(color: Color(0xff000000)), + actionsPadding: EdgeInsets.all(8.0), ).debugFillProperties(builder); final List description = builder.properties .where((DiagnosticsNode n) => !n.isFiltered(DiagnosticLevel.info)) @@ -64,6 +65,7 @@ void main() { 'alignment: Alignment.bottomLeft', 'titleTextStyle: TextStyle(inherit: true, color: Color(0xffffffff))', 'contentTextStyle: TextStyle(inherit: true, color: Color(0xff000000))', + 'actionsPadding: EdgeInsets.all(8.0)', ]); });