flutter OutlinedButton按钮分析
flutter OutlinedButton按钮分析
Star资料参考
Migrating to the New Material Buttons and their Themes
OutlinedButton
类
OutlinedButton
类是一个 Material Design 风格的 “Outlined Button”,它继承自 ButtonStyleButton
类,表示一个带有按钮样式的可点击组件。
OutlinedButton
类的构造函数如下:
1 | const OutlinedButton({ |
这个构造函数接受多个参数,其中一些是从父类 ButtonStyleButton
继承的。这些参数包括 key
、onPressed
、onLongPress
、onHover
、onFocusChange
、style
、focusNode
、autofocus
、clipBehavior
、statesController
和 child
。这些参数用于配置按钮的行为和外观。
OutlinedButton.icon
工厂构造函数
OutlinedButton.icon
是一个工厂构造函数,用于创建一个带有图标和标签的 OutlinedButton
实例。它的定义如下:
1 | factory OutlinedButton.icon({ |
这个构造函数接受多个参数,包括 key
、onPressed
、onLongPress
、style
、focusNode
、autofocus
、clipBehavior
、statesController
、icon
和 label
。其中,icon
和 label
是必需的参数,用于指定按钮中显示的图标和标签。
OutlinedButton.icon
构造函数创建了一个 _OutlinedButtonWithIcon
实例,它是 OutlinedButton
的一个子类,它通过传递参数来配置按钮的行为和外观。
好的,我们继续分析剩下的部分。
styleFrom
静态方法
styleFrom
是一个静态方法,用于根据简单值创建一个 ButtonStyle
实例。它的定义如下:
foregroundColor
:设置按钮的前景色,即文本和图标的颜色。backgroundColor
:设置按钮的背景色。disabledForegroundColor
:设置按钮在禁用状态下的前景色。disabledBackgroundColor
:设置按钮在禁用状态下的背景色。textStyle
:设置按钮中文本的样式,如字体大小、字体粗细等。padding
:设置按钮的内边距。minimumSize
:设置按钮的最小尺寸。side
:设置按钮的边框样式。shape
:设置按钮的形状,如圆角矩形、圆形等。alignment
:设置按钮内容的对齐方式。visualDensity
:设置按钮的视觉密度。tapTargetSize
:设置按钮的点击目标大小。overlayColor
:设置按钮的叠加颜色,用于点击时的水波纹效果。shadowColor
:设置按钮的阴影颜色。elevation
:设置按钮的海拔高度,影响阴影效果。mouseCursor
:设置鼠标悬停在按钮上时的光标样式。visualShape
:设置按钮的可视形状。animationDuration
:设置按钮状态变化的动画持续时间。enableFeedback
:设置按钮是否启用触觉反馈。tapBehavior
:设置按钮的点击行为,如不可点击、禁用点击等。
以上是 styleFrom
方法中的全部参数及其作用。可以根据需要选择其中的一个或多个参数,并传递相应的值来定制按钮的外观和行为。
defaultStyleOf
方法
defaultStyleOf
是 OutlinedButton
类中的一个静态方法,用于获取默认的按钮样式。它的定义如下:
1 | static ButtonStyle defaultStyleOf(BuildContext context) { |
这个方法接受一个 BuildContext
对象作为参数,用于获取当前主题的颜色和文本样式。
在方法体中,首先通过 Theme.of(context)
获取当前的主题数据。然后,使用主题数据中的颜色方案和文本样式来设置按钮的默认样式。
具体来说,defaultStyleOf
方法使用 ElevatedButton.styleFrom
方法创建一个基本的按钮样式,然后通过 copyWith
方法进行进一步的定制。以下是对一些关键属性的解释:
primary
:设置按钮的主要颜色,通常是按钮的背景色。onPrimary
:设置按钮上文本和图标的颜色。onSurface
:设置按钮在表面(即非禁用状态)上文本和图标的颜色。textStyle
:设置按钮中文本的样式,如字体大小、字体粗细等。side
:设置按钮的边框样式。
最后,defaultStyleOf
方法返回一个包含默认样式的 ButtonStyle
实例。
可以在创建按钮时使用 defaultStyleOf
方法来获取默认样式,并根据需要进行进一步的定制。
_scaledPadding
函数
_scaledPadding
是 OutlinedButton
类中的一个私有函数,用于计算按钮的内边距。它的定义如下:
1 | EdgeInsetsGeometry _scaledPadding( |
这个函数接受两个参数:padding
和 visualDensity
。padding
是按钮的原始内边距,visualDensity
是按钮的视觉密度。
在函数体中,首先判断 padding
是否是非均匀的内边距,即上、下、左、右四个方向的内边距是否不相等。如果是非均匀的内边距,那么乘以 visualDensity.baseSizeAdjustment
来调整内边距的大小。
如果 padding
是均匀的内边距,那么将 visualDensity.baseSizeAdjustment
的值加到每个方向的内边距上。
最后,返回计算后的 EdgeInsetsGeometry
对象,表示调整后的内边距。
_scaledPadding
函数的作用是根据按钮的视觉密度调整按钮的内边距。视觉密度可以影响按钮的大小和间距,以适应不同的屏幕尺寸和设备像素密度。
这个函数通常在按钮的布局过程中被调用,用于计算最终的内边距值,以确保按钮在不同的视觉密度下保持一致的外观。