defaultStyleOf method

  1. @override
ButtonStyle defaultStyleOf(
  1. BuildContext context
)
override

Returns a ButtonStyle that's based primarily on the Theme's ThemeData.textTheme and ThemeData.colorScheme, but has most values filled out (non-null).

The returned style can be overridden by the style parameter and by the style returned by themeStyleOf that some button-specific themes like TextButtonTheme or ElevatedButtonTheme override. For example the default style of the TextButton subclass can be overridden with its TextButton.style constructor parameter, or with a TextButtonTheme.

Concrete button subclasses should return a ButtonStyle with as many non-null properties as possible, where all of the non-null WidgetStateProperty properties resolve to non-null values.

Properties that can be null

Some properties, like ButtonStyle.fixedSize would override other values in the same ButtonStyle if set, so they are allowed to be null. Here is a summary of properties that are allowed to be null when returned in the ButtonStyle returned by this function, an why:

See also:

  • themeStyleOf, returns the ButtonStyle of this button's component theme.

Implementation

@override
ButtonStyle defaultStyleOf(BuildContext context) {
  final ThemeData theme = Theme.of(context);
  final ColorScheme colorScheme = theme.colorScheme;

  return Theme.of(context).useMaterial3
      ? _MElevatedButtonDefaultsM3(context)
      : styleFrom(
          backgroundColor: colorScheme.primary,
          foregroundColor: colorScheme.onPrimary,
          disabledBackgroundColor: colorScheme.onSurface.withOpacity(0.12),
          disabledForegroundColor: colorScheme.onSurface.withOpacity(0.38),
          shadowColor: theme.shadowColor,
          elevation: 2,
          textStyle: theme.textTheme.labelLarge,
          padding: _scaledPadding(context),
          minimumSize: const Size(64, 36),
          maximumSize: Size.infinite,
          shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(4))),
          enabledMouseCursor: SystemMouseCursors.click,
          disabledMouseCursor: SystemMouseCursors.basic,
          visualDensity: theme.visualDensity,
          tapTargetSize: theme.materialTapTargetSize,
          animationDuration: kThemeChangeDuration,
          enableFeedback: true,
          alignment: Alignment.center,
          splashFactory: InkRipple.splashFactory,
        );
}