作者 | 弗拉德
来源 | 弗拉德(公众号:fulade_me)
Material 风格中常用的按钮有三种RaiseButton
、FlatButton
、OutlineButton
。
这三种按钮都是继承了MaterialButton
,而MaterialButton
又继承自StatelessWidget
。
RaiseButton:带有阴影效果的按钮,默认带有灰色背景,点击下去会有点击效果和阴影。
FlatButton: 扁平风格按钮,点击下去会有背景颜色。
OutlineButton: 带有边框的按钮,且边框会在点击时改变颜色。
我们先来看RaisedButton
的构造方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| const RaisedButton({ Key key, @required VoidCallback onPressed, VoidCallback onLongPress, ValueChanged<bool> onHighlightChanged, MouseCursor mouseCursor, ButtonTextTheme textTheme, Color textColor, Color disabledTextColor, Color color, Color disabledColor, Color focusColor, Color hoverColor, Color highlightColor, Color splashColor, Brightness colorBrightness, double elevation, double focusElevation, double hoverElevation, double highlightElevation, double disabledElevation, EdgeInsetsGeometry padding, VisualDensity visualDensity, ShapeBorder shape, Clip clipBehavior = Clip.none, FocusNode focusNode, bool autofocus = false, MaterialTapTargetSize materialTapTargetSize, Duration animationDuration, Widget child, })
|
1.1 一个最简单的RaisedButton
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| RaisedButton( child: Text("RaisedButton"), onPressed: () {}, ); ```` 效果: ![2020_12_17_rased_button_tap](https:
**1.2 不可点击状态** ``` dart RaisedButton( child: Text("不设置onPressed"), disabledColor: Colors.blue, disabledTextColor: Colors.red, );
|
如果不设置onPressed
参数,默认是不可点击的,当然我们依然可以设置不可点击时候的文字颜色和背景颜色。需要注意onPressed
是@required
参数,不建议不传此参数。
1.3 文本颜色
1 2 3 4 5
| RaisedButton( child: Text("textColor红色"), textColor: Colors.red, onPressed: () {}, );
|
textColor
可以设置文字的颜色。
1.4 设置形状
1 2 3 4 5
| RaisedButton( onPressed: () {}, child: Text("椭圆形"), shape: StadiumBorder(), );
|
通过shape
参数可以设置按钮的形状,常见的形状有RoundedRectangleBorder
矩形、CircleBorder
圆形、StadiumBorder
椭圆形、BeveledRectangleBorder
八边形。
1.5 背景颜色
1 2 3 4 5
| RaisedButton( child: Text("背景颜色"), color: Colors.red, onPressed: () {}, );
|
通过传入color
可以设置按钮的背景颜色。
1.6 高亮颜色
1 2 3 4 5
| RaisedButton( onPressed: () {}, child: Text("高亮红色"), highlightColor: Colors.red, );
|
传入highlightColor
参数来设置选中时候的颜色。
1.7 水波纹红色
1 2 3 4 5
| RaisedButton( onPressed: () {}, child: Text("水波纹红色"), splashColor: Colors.red, );
|
splashColor
可以帮助我们设置点击后的水波纹颜色。
1.8 高亮回调
1 2 3 4 5 6 7
| RaisedButton( child: Text("高亮变化回调"), onPressed: () {}, onHighlightChanged: (value) { print("高亮切换"); }, );
|
onHighlightChanged
可以接收一个回调方法,当按钮被按下并高亮的时候会回调该方法。
1.9 长按回调
1 2 3 4 5 6 7
| RaisedButton( child: Text("长按回调"), onPressed: () {}, onLongPress: () { print("长按回调"); }, );
|
onLongPress
可以接收一个长按回调方法,当按钮被长按的时候会回调该方法。
1.10 设置阴影的大小
1 2 3 4 5
| RaisedButton( child: Text("阴影设置20"), onPressed: () {}, elevation: 20.0, );
|
elevation
参数可以设置阴影的大小,默认的阴影比较小,可以通过此参数设置更大的阴影大小。
想体验以上代码运行效果,可以到我的Github仓库项目flutter_app
->lib
->routes
->flat_button_page.dart
,可以下载下来运行并体验。
FlatButton
的构造函数参数跟RaisedButton
参数基本一致,设置方式也是一样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| const FlatButton({ Key key, @required VoidCallback onPressed, VoidCallback onLongPress, ValueChanged<bool> onHighlightChanged, MouseCursor mouseCursor, ButtonTextTheme textTheme, Color textColor, Color disabledTextColor, Color color, Color disabledColor, Color focusColor, Color hoverColor, Color highlightColor, Color splashColor, Brightness colorBrightness, EdgeInsetsGeometry padding, VisualDensity visualDensity, ShapeBorder shape, Clip clipBehavior = Clip.none, FocusNode focusNode, bool autofocus = false, MaterialTapTargetSize materialTapTargetSize, @required Widget child, })
|
2.1 一个最简单的FlatButton
1 2 3 4
| FlatButton( child: Text("FlatButton"), onPressed: () {}, );
|
我们可以看到相对比于RaisedButton
,FlatButton
默认扁平化风格的。
2.2 设置形状
1 2 3 4 5
| FlatButton( onPressed: () {}, child: Text("椭圆形"), shape: StadiumBorder(), );
|
通过传入shape
参数可设置FlatButton
的形状。需要注意的是:设置好的形状,只有当点击下去的时候才可以看到效果。
其他的 不可点击状态、文本颜色、背景颜色、高亮颜色、水波纹红色、高亮回调、长按回调等状态的设置代码跟RaisedButton
的设置方式一样。
想体验FlatButton
的运行效果,可以到我的Github仓库项目flutter_app
->lib
->routes
->flat_button_page.dart
,可以下载下来运行并体验。
我们来看OutlineButton
的构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| const OutlineButton({ Key key, @required VoidCallback onPressed, VoidCallback onLongPress, MouseCursor mouseCursor, ButtonTextTheme textTheme, Color textColor, Color disabledTextColor, Color color, Color focusColor, Color hoverColor, Color highlightColor, Color splashColor, double highlightElevation, this.borderSide, this.disabledBorderColor, this.highlightedBorderColor, EdgeInsetsGeometry padding, VisualDensity visualDensity, ShapeBorder shape, Clip clipBehavior = Clip.none, FocusNode focusNode, bool autofocus = false, Widget child, })
|
3.1 简单的 OutlineButton
1 2 3 4
| OutlineButton( onPressed: () {}, child: Text("OutlineButton"), );
|
它的边框默认是灰色的,点击选中的时候会变为蓝色。
3.2 Border的样式
1 2 3 4 5 6 7
| OutlineButton( child: Text("Border颜色"), borderSide: BorderSide(color: Colors.red, width: 2), highlightColor: Colors.yellow, highlightedBorderColor: Colors.green, onPressed: () {}, );
|
borderSide
可以接收一个BorderSide
的对象,该对象可以设置颜色和宽度,同样我们也可以通过设置highlightColor
和highlightedBorderColor
来设置选中的背景颜色和选中的边框颜色。
其他的 不可点击状态、文本颜色、高亮颜色、水波纹红色、高亮回调、长按回调等状态的设置代码跟RaisedButton
的设置方式一样。
想体验FlatButton
的运行效果,可以到我的Github仓库项目flutter_app
->lib
->routes
->outline_button_page.dart
,可以下载下来运行并体验。
4.1 简单的IconButton
1 2 3 4
| IconButton( icon: Icon(Icons.local_taxi), onPressed: () {}, );
|
IconButton
可以接收一个Icon
类的的参数,Flutter自带了很多Icon
详情可见这里
4.1 带有选中提示的IconButton
1 2 3 4 5 6
| IconButton( icon: Icon(Icons.local_cafe), tooltip: "Cafe Button", color: Colors.red, onPressed: () {}, );
|
通过设置tooltip
属性,可以设置按钮按下的弹出提示文字。我们这里设置了Cafe Button
的文字。
4.2 自定义图片的IconButton
1 2 3 4
| IconButton( icon: Image.asset("images/flutter_icon_100.png"), onPressed: () {}, );
|
我们同样可以提供一个Image
类型的Icon
,这样就满足我们设置不同的图片按钮。
如下图:
想体验IconButton
的运行效果,可以到我的Github仓库项目flutter_app
->lib
->routes
->icon_button_page.dart
,可以下载下来运行并体验。
以上就是Material风格的按钮以及详解,如果你想了解Cupertino风格按钮,可以点击这里。
我们日常开发中大多数情况下都会使用Material风格的样式。