styleFrom static method
- Color? foregroundColor,
- Color? backgroundColor,
- Color? disabledForegroundColor,
- Color? disabledBackgroundColor,
- Color? shadowColor,
- Color? surfaceTintColor,
- Color? iconColor,
- double? iconSize,
- Color? disabledIconColor,
- Color? overlayColor,
- double? elevation,
- TextStyle? textStyle,
- EdgeInsetsGeometry? padding,
- Size? minimumSize,
- Size? fixedSize,
- Size? maximumSize,
- BorderSide? side,
- OutlinedBorder? shape,
- MouseCursor? enabledMouseCursor,
- MouseCursor? disabledMouseCursor,
- VisualDensity? visualDensity,
- MaterialTapTargetSize? tapTargetSize,
- Duration? animationDuration,
- bool? enableFeedback,
- AlignmentGeometry? alignment,
- InteractiveInkFeatureFactory? splashFactory,
- ButtonLayerBuilder? backgroundBuilder,
- ButtonLayerBuilder? foregroundBuilder,
A static convenience method that constructs a filled button ButtonStyle given simple values.
The foregroundColor
and disabledForegroundColor
colors are used
to create a WidgetStateProperty ButtonStyle.foregroundColor, and
a derived ButtonStyle.overlayColor if overlayColor
isn't specified.
If overlayColor
is specified and its value is Colors.transparent
then the pressed/focused/hovered highlights are effectively defeated.
Otherwise a WidgetStateProperty with the same opacities as the
default is created.
Similarly, the enabledMouseCursor
and disabledMouseCursor
parameters are used to construct ButtonStyle.mouseCursor.
The iconColor
, disabledIconColor
are used to construct
ButtonStyle.iconColor and iconSize
is used to construct
ButtonStyle.iconSize.
The button's elevations are defined relative to the elevation
parameter. The disabled elevation is the same as the parameter
value, elevation
+ 2 is used when the button is hovered
or focused, and elevation + 6 is used when the button is pressed.
All of the other parameters are either used directly or used to create a WidgetStateProperty with a single value for all states.
All parameters default to null, by default this method returns a ButtonStyle that doesn't override anything.
For example, to override the default text and icon colors for a FilledButton, as well as its overlay color, with all of the standard opacity adjustments for the pressed, focused, and hovered states, one could write:
FilledButton(
style: FilledButton.styleFrom(foregroundColor: Colors.green),
onPressed: () {},
child: const Text('Filled button'),
);
or for a Filled tonal variant:
FilledButton.tonal(
style: FilledButton.styleFrom(foregroundColor: Colors.green),
onPressed: () {},
child: const Text('Filled tonal button'),
);
Implementation
static ButtonStyle styleFrom({
Color? foregroundColor,
Color? backgroundColor,
Color? disabledForegroundColor,
Color? disabledBackgroundColor,
Color? shadowColor,
Color? surfaceTintColor,
Color? iconColor,
double? iconSize,
Color? disabledIconColor,
Color? overlayColor,
double? elevation,
TextStyle? textStyle,
EdgeInsetsGeometry? padding,
Size? minimumSize,
Size? fixedSize,
Size? maximumSize,
BorderSide? side,
OutlinedBorder? shape,
MouseCursor? enabledMouseCursor,
MouseCursor? disabledMouseCursor,
VisualDensity? visualDensity,
MaterialTapTargetSize? tapTargetSize,
Duration? animationDuration,
bool? enableFeedback,
AlignmentGeometry? alignment,
InteractiveInkFeatureFactory? splashFactory,
ButtonLayerBuilder? backgroundBuilder,
ButtonLayerBuilder? foregroundBuilder,
}) {
final MaterialStateProperty<Color?>? overlayColorProp = switch ((foregroundColor, overlayColor)) {
(null, null) => null,
(_, Color(a: 0.0)) => WidgetStatePropertyAll<Color?>(overlayColor),
(_, final Color color) || (final Color color, _) => WidgetStateProperty<Color?>.fromMap(
<WidgetState, Color?>{
WidgetState.pressed: color.withOpacity(0.1),
WidgetState.hovered: color.withOpacity(0.08),
WidgetState.focused: color.withOpacity(0.1),
},
),
};
return ButtonStyle(
textStyle: MaterialStatePropertyAll<TextStyle?>(textStyle),
backgroundColor: ButtonStyleButton.defaultColor(backgroundColor, disabledBackgroundColor),
foregroundColor: ButtonStyleButton.defaultColor(foregroundColor, disabledForegroundColor),
overlayColor: overlayColorProp,
shadowColor: ButtonStyleButton.allOrNull<Color>(shadowColor),
surfaceTintColor: ButtonStyleButton.allOrNull<Color>(surfaceTintColor),
iconColor: ButtonStyleButton.defaultColor(iconColor, disabledIconColor),
iconSize: ButtonStyleButton.allOrNull<double>(iconSize),
elevation: ButtonStyleButton.allOrNull(elevation),
padding: ButtonStyleButton.allOrNull<EdgeInsetsGeometry>(padding),
minimumSize: ButtonStyleButton.allOrNull<Size>(minimumSize),
fixedSize: ButtonStyleButton.allOrNull<Size>(fixedSize),
maximumSize: ButtonStyleButton.allOrNull<Size>(maximumSize),
side: ButtonStyleButton.allOrNull<BorderSide>(side),
shape: ButtonStyleButton.allOrNull<OutlinedBorder>(shape),
mouseCursor: WidgetStateProperty<MouseCursor?>.fromMap(
<WidgetStatesConstraint, MouseCursor?>{
WidgetState.disabled: disabledMouseCursor,
WidgetState.any: enabledMouseCursor,
},
),
visualDensity: visualDensity,
tapTargetSize: tapTargetSize,
animationDuration: animationDuration,
enableFeedback: enableFeedback,
alignment: alignment,
splashFactory: splashFactory,
backgroundBuilder: backgroundBuilder,
foregroundBuilder: foregroundBuilder,
);
}