Flutter 中按鈕這種 widget 種類可是不少:
RaisedButton
- 凸起按鈕,帶陰影FlatButton
- 扁平按鈕,不帶陰影OutlineButton
- 自帶邊框的按鈕,不能設定背景色color
MaterialButton
- MD 風格的按鈕,可以設定寬高值,是 Flutter 中所有按鈕的基類IconButton
- 在Icon
基礎上加上點選事件,不能設定背景色和邊框FloatingActionButton
- 懸浮按鈕
MaterialButton
MaterialButton
是 Flutter 中所有 Button
型別的基類,MaterialButton
的引數再其他 Button
中都是通用的,我們簡單看一下:
const MaterialButton({
Key key,
@required this.onPressed, // 點選事件,必須給值,寫null的話表示不可用
this.onHighlightChanged,
this.textTheme, //預設文字樣式
this.textColor, // 文字顏色
this.disabledTextColor, // 不可用時文字顏色
this.color, // 背景色
this.disabledColor, // 按鈕被禁用時的文字顏色
this.highlightColor, // 按鈕的水波紋亮起的顏色,點選之後的顏色,注意這個顏色點選之後就一直在這裡了,不是那種一瞬間顯示
this.splashColor, // 波浪紋顏色
this.colorBrightness, // 按鈕主題高亮
this.elevation, // Z軸、陰影,正常應該小於 5
this.highlightElevation, // 按鈕高亮時的下面的陰影長度
this.disabledElevation,
this.padding,
this.shape, // 按鈕樣式
this.clipBehavior = Clip.none,
this.materialTapTargetSize,
this.animationDuration,
this.minWidth,
this.height,
this.child, // 按鈕內部widget,一般都是text
})
複製程式碼
1. textTheme
系統預設提供的配色方案:
ButtonTextTheme.normal:
ButtonTextTheme.accent:
ButtonTextTheme.primary:
2. shape
提供了4種預設的按鈕形狀:
BeveledRectangleBorder
CircleBorder
RoundedRectangleBorder
StadiumBorder
3. 按鈕按下時圖示:
RaisedButton
RaisedButton
- 凸起按鈕,帶陰影的那種
class DD extends StatelessWidget {
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: () {
print("AAAAAA");
},
color: Colors.blueAccent,
child: Text(
"浮動按鈕",
style: TextStyle(fontSize: 30),
),
textColor: Colors.white,
elevation: 10,
disabledColor: Colors.grey,
padding: EdgeInsets.all(20),
splashColor: Colors.red,
shape: BeveledRectangleBorder(
borderRadius: BorderRadius.circular(10),
));
}
}
複製程式碼
FlatButton
FlatButton
- 扁平按鈕,不能帶陰影,其他和 RaisedButton 一樣
class DD extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FlatButton(
onPressed: () {
print("AAAAAA");
},
color: Colors.blueAccent,
child: Text(
"浮動按鈕",
style: TextStyle(fontSize: 30),
),
textColor: Colors.white,
disabledColor: Colors.grey,
padding: EdgeInsets.all(20),
splashColor: Colors.red,
shape: BeveledRectangleBorder(
borderRadius: BorderRadius.circular(10),
));
}
}
複製程式碼
OutlineButton
OutlineButton
- 自帶邊框的按鈕,不能設定背景色color
class DD extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new OutlineButton(
onPressed: () {
print(BorderStyle.values);
},
borderSide: BorderSide(
color: Colors.blue,
width: 2.0,
style: BorderStyle.solid
),
child: new Text('pressed'),
);
}
}
複製程式碼
MaterialButton
MaterialButton
- MD 風格的按鈕,屬性同上,但是可以設定寬高值
class DD extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialButton(
minWidth: 200,
height: 80,
color: Colors.blue,
textColor: Colors.white,
onPressed: () {
print("AAAAAA");
},
child: new Text('button'),
);
}
}
複製程式碼
IconButton
IconButton
- 在 Icon
基礎上加上點選事件,不能設定背景色和邊框,圖就沒必要放了,child
除了可以接受Icon
之外,還可以接受RichText
class DD extends StatelessWidget {
@override
Widget build(BuildContext context) {
return IconButton(
onPressed: () {
print("AAAAAA");
},
color: Colors.red,
iconSize: 50,
icon: new Icon(Icons.star),
padding: const EdgeInsets.all(12.0)
);
}
}
複製程式碼
FloatingActionButton
FloatingActionButton
這個大家都是耳熟能詳了吧,如果有時間,可以看看:FlatButton的Material設計理念,這是官方指導,FloatingActionButton
所有典型應用案例都在裡面了,雖說是英文的,但是大家看圖就知道咋回事了
圖隨便找的
child
很隨意,可以是 Text、icon, etctooltip
長按提示foregroundColor
child 沒有設定顏色時生效backgroundColor
背景色elevation
陰影highlightElevation
按下時陰影shape
形狀mini
是小圖示還是大圖示
@override
Widget build(BuildContext context) {
return FloatingActionButton(
child: Icon(Icons.adb),
tooltip: "tips",
backgroundColor: Colors.blueAccent,
foregroundColor: Colors.amberAccent,
onPressed: (){
print("tips!");
},
);
}
複製程式碼