flutter控件練習demo地址:githubandroid
所謂的 button 就是都有 onPressed 屬性, 能夠點擊響應事件的 , 有點擊的效果 , 若是 onPressed 設置爲 null 的話,button 都是 disable 的,同時 button 有 disable 的樣式 , 按下時 有高亮顯示ios
默認的是一個最小寬度爲88,高度爲36,有圓角,有陰影,點擊的時候高亮,有 onpress 屬性的一個控件。能夠響應用戶點擊事件。可是:官方不推薦使用這個,推薦使用它的子類 RaisedButton、FlatButton 和 OutlineButton,若是自定義 button 推薦使用 RawMaterialButtongit
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
class ButtonDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("Button"),
centerTitle: true,
),
body: Padding(
padding: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
MaterialButton(
// onPressed不能設置null 至關於用戶按下時(高亮) 或者 鬆開時(不高亮)的監聽。 也就是 MaterialButton 樣式改變時
// onHighlightChanged: (boo) {
// Fluttertoast.showToast(
// msg: "onHighlightChanged改變了", textColor: Colors.white);
// },
child: Text("MaterialButton"),
// 按下以後鬆開的回調,也就是所謂的點擊事件。實際上是當用戶手擡起來時的動做
onPressed: () {
Fluttertoast.showToast(
msg: "點擊MaterialButton", textColor: Colors.white);
},
// onPressed: null,
// 裏面文本的顏色
// textColor: Colors.red,
// 當狀態爲 disable的時候 文本的顏色,onpress=null 爲disable
// 在這裏we;
//在這裏無效 在它子類有效(RaisedButton ,FlatButton ,OutlineButton )
// disabledTextColor: Colors.black,
// 設置邊框樣式 , 在MaterialButton這裏沒用 在它子類裏面有用
// shape: Border.all(
// width: 10,
// color:Color(0xFFFF0000),
// style: BorderStyle.solid,
// ),
// 當是 enable (onpress != null) 背景 ,有陰影,有圓角
//在這裏無效 在它子類有效(RaisedButton ,FlatButton ,OutlineButton )
shape: Border.all(color: Color(0xFFFF0000),style: BorderStyle.solid,width: 2),
color: Colors.grey,
// onpress = null 的時候的顏色(不知道爲何無論用)
// 我測試的結果是 當onPress = null 的時候 ,仍是 上面 color 屬性的顏色, 只不過是沒有陰影,沒有圓角而已
// 在這裏無效 在它子類有效(RaisedButton ,FlatButton ,OutlineButton )
// disabledColor: Colors.amberAccent,
// 當用戶 按下高亮時 的顏色
// highlightColor: Colors.red,
// splashColor: Colors.deepPurple,
// colorBrightness: Brightness.light,
// 高度, 陰影 默認是2
elevation: 2,
// 高亮時的陰影 默認是 8 button 被按下的時候
// highlightElevation: 14,
// 當 disabled (onpress = null) 的陰影 默認是0
// 測試的時候 陰影仍是 爲0.0
//在這裏無效 在它子類有效(RaisedButton ,FlatButton ,OutlineButton )
// disabledElevation: 20,
// padding: EdgeInsets.all(20),
// 最小的寬度 默認是 88 。 在 ButtonTheme 規定的
// minWidth: 187,
// 高度, 默認是 36 也是在 ButtonTheme 規定的
// height: 1,
)
],
),
),
);
}
}
複製代碼
RaisedButton: 屬性基本上和上面的父類同樣,The [elevation], [highlightElevation], [disabledElevation], 和 [clipBehavior] 必須非空.github
在上面我們知道 disabledTextColor、disabledColor、disabledElevation 和 shape 在這裏設置纔有效。如今主要講一下 shape (邊框)bash
FlatButton: 扁平按鈕,通常沒有陰影,沒有邊框,且大部分用在 toolbar,dialogs , 或者 其餘內容中 注意點: 必定要設置onPress屬性,不然他就是不可點擊的app
OutlineButton: 默認有細灰色圓角邊框,無陰影,且背景透明,當按下的時候,有默認highlightElevation 和 highColor 。less
通常用在AppBar.actions 中,固然其餘地方也可使用, [icon] 屬性必須指定,通常都 Icon 或者 ImageIcon 。 響應點擊的時候,是一個大圓ide
PopupMenuButton 至關於 android 中的 PopupMenu 和 ios 中的 UIMenuController ,測試
icon 和 child 不能同時設置, 不然報錯,若是都沒有設置,flutter會根據不一樣的平臺 給一個icon ,android 中是三個點,child 不要設置有(onpress屬性)點擊事件的 控件,好比 FlatButton 等等,由於影響 PopupMenuButton的點擊事件ui
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
class ButtonDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("Button"),
centerTitle: true,
),
body: Padding(
padding: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
MaterialButton(
// onPressed不能設置null 至關於用戶按下時(高亮) 或者 鬆開時(不高亮)的監聽。 也就是 MaterialButton 樣式改變時
// onHighlightChanged: (boo) {
// Fluttertoast.showToast(
// msg: "onHighlightChanged改變了", textColor: Colors.white);
// },
child: Text("MaterialButton"),
// 按下以後鬆開的回調,也就是所謂的點擊事件。實際上是當用戶手擡起來時的動做
onPressed: () {
Fluttertoast.showToast(
msg: "點擊MaterialButton", textColor: Colors.white);
},
// onPressed: null,
// 裏面文本的顏色
// textColor: Colors.red,
// 當狀態爲 disable的時候 文本的顏色,onpress=null 爲disable
// 在這裏we;
//在這裏無效 在它子類有效(RaisedButton ,FlatButton ,OutlineButton )
// disabledTextColor: Colors.black,
// 設置邊框樣式 , 在MaterialButton這裏沒用 在它子類裏面有用
// shape: Border.all(
// width: 10,
// color:Color(0xFFFF0000),
// style: BorderStyle.solid,
// ),
// 當是 enable (onpress != null) 背景 ,有陰影,有圓角
//在這裏無效 在它子類有效(RaisedButton ,FlatButton ,OutlineButton )
shape: Border.all(
color: Color(0xFFFF0000), style: BorderStyle.solid, width: 2),
color: Colors.grey,
// onpress = null 的時候的顏色(不知道爲何無論用)
// 我測試的結果是 當onPress = null 的時候 ,仍是 上面 color 屬性的顏色, 只不過是沒有陰影,沒有圓角而已
// 在這裏無效 在它子類有效(RaisedButton ,FlatButton ,OutlineButton )
// disabledColor: Colors.amberAccent,
// 當用戶 按下高亮時 的顏色
// highlightColor: Colors.red,
// splashColor: Colors.deepPurple,
// colorBrightness: Brightness.light,
// 高度, 陰影 默認是2
elevation: 2,
// 高亮時的陰影 默認是 8 button 被按下的時候
// highlightElevation: 14,
// 當 disabled (onpress = null) 的陰影 默認是0
// 測試的時候 陰影仍是 爲0.0
//在這裏無效 在它子類有效(RaisedButton ,FlatButton ,OutlineButton )
// disabledElevation: 20,
// padding: EdgeInsets.all(20),
// 最小的寬度 默認是 88 。 在 ButtonTheme 規定的
// minWidth: 187,
// 高度, 默認是 36 也是在 ButtonTheme 規定的
// height: 1,
)
],
),
),
);
}
}
class RaiseButtonDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("Button"),
centerTitle: true,
),
body: Padding(
padding: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
MaterialButton(
child: Text("MaterialButton"),
// 按下以後鬆開的回調,也就是所謂的點擊事件。實際上是當用戶手擡起來時的動做
onPressed: () {
Fluttertoast.showToast(
msg: "點擊MaterialButton", textColor: Colors.white);
},
// shape: Border.all(
// // 設置邊框樣式
// width: 10,
// color:Color(0xFFFF0000),
// style: BorderStyle.solid,
// ),
shape: Border.all(
color: Color(0xFFFF0000),
style: BorderStyle.solid,
width: 10),
color: Colors.grey,
elevation: 2,
),
RaisedButton(
disabledColor: Colors.blue,
onPressed: () {
Fluttertoast.showToast(
msg: "點擊RaisedButton", textColor: Colors.white);
},
child: Text("RaisedButton 方式1"),
),
Row(
children: <Widget>[
RaisedButton(
onPressed: () {},
child: Text("1"),
shape: Border.all(
color: Colors.red, width: 2, style: BorderStyle.solid),
),
RaisedButton(
onPressed: () {},
child: Text("1"),
shape: RoundedRectangleBorder(
side: BorderSide(
color: Colors.red,
width: 2,
style: BorderStyle.solid),
borderRadius: BorderRadius.all(Radius.circular(5))),
),
RaisedButton(
onPressed: () {},
child: Text("1"),
shape: StadiumBorder(
side: BorderSide(
color: Colors.red, width: 2, style: BorderStyle.solid),
),
),
RaisedButton(
onPressed: () {},
child: Text("1"),
shape: UnderlineInputBorder(
borderSide: BorderSide(
color: Colors.red,
style: BorderStyle.solid,
width: 2))),
],
),
RaisedButton.icon(
onPressed: () {
Fluttertoast.showToast(
msg: "點擊RaisedButton", textColor: Colors.white);
},
icon: Icon(Icons.add),
label: Text("RaisedButton.icon的方式"),
// 一個矩形邊框
// shape: Border.all(
// width: 2,
// color: Colors.red,
// style: BorderStyle.solid,
// ),
// 能夠設置四個角的弧度的邊框
// shape: RoundedRectangleBorder(
// side: BorderSide(
// width: 2,
// color: Colors.red,
// style: BorderStyle.solid,
// ),
// borderRadius: BorderRadius.all(Radius.circular(5)),
// ),
// 只有下面一個邊框
// shape: UnderlineInputBorder( borderSide:BorderSide(color: Colors.red, style: BorderStyle.solid, width: 2)),
// 圓形邊框(這裏會裁剪他)
// shape: CircleBorder(side: BorderSide(color: Colors.red, style: BorderStyle.solid, width: 2))
// 把高或者寬弄成半圓
// shape: StadiumBorder(side: BorderSide(width: 2, style: BorderStyle.solid, color: Color(0xFF00FFFF))),
// 剪切四個角
shape: BeveledRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
side: BorderSide(
color: Colors.red,
style: BorderStyle.solid,
width: 2))),
FlatButton(
child: Text("flatbutton"),
color: Colors.blue,
onPressed: () {}),
OutlineButton(
disabledBorderColor: Colors.grey,
highlightedBorderColor: Colors.red,
child: Text("outlinebuton"),
onPressed: () {},
),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
IconButton(
// 必須的參數 通常是 Icon 或者是 ImageIcono
// icon: Icon(Icons.add),
icon: Icon(Icons.add),
// 點擊事件
onPressed: () {},
// 按鈕不可點擊時的顏色
disabledColor: Colors.red,
//icon 的大小
iconSize: 40,
// 圍繞在 icon 周圍的 padding , 周圍的padding也能夠響應點擊事件,手勢事件
padding: EdgeInsets.all(0),
// icon 在 IconButton 中的位置
alignment: Alignment.center,
// icon 的顏色 若是裏面是 Text ,text的顏色不會改變 注意 不是背景色, 就是icon的顏色
color: Colors.red,
// 高亮時的背景顏色
highlightColor: Colors.blue,
// 按下瞬間的顏色 加入從手指按下以後 先是 splashColor而後再是 highlightColor
splashColor: Colors.black,
// 默認沒有長按提示
tooltip: "長按的提示"),
// 就是一個iconbutton 設置了一返回箭頭的icon
BackButton(),
// 就是一個iconbutton 設置了一 x 關閉的icon
CloseButton(),
],
),
PopupMenuButton(
// 初始的value , 就是打開的時候, 在這個value 裏面會有不一樣的樣式,讓你知道當前值
// initialValue: "item1",
// 點擊返回鍵,或者是點擊外部, popupmenu關閉時的回調
onCanceled: () {
Fluttertoast.showToast(msg: "取消選擇了", textColor: Colors.white);
},
// 選擇時的回調
onSelected: (String value) {
Fluttertoast.showToast(
msg: "選擇的值是:$value", textColor: Colors.white);
},
// 若是 icon 和 child 屬性都沒有設置值,flutter會根據不一樣的平臺 給一個icon ,android 中是三個點
// icon 和 child 不能同時設置, 不然報錯
icon: Icon(Icons.menu),
// child: Text("打開"), 不要設置有點擊事件的 控件,好比 FlatButton 等等,由於影響 PopupMenuButton的點擊事件
// 當前 控件 向左 向下平移
offset: Offset(-20, 50.0),
itemBuilder: (BuildContext context) => <PopupMenuItem<String>>[
PopupMenuItem(
value: "item1",
child: Row(children: <Widget>[
Icon(Icons.delete),
Text("刪除")
])),
PopupMenuItem(
value: "item2",
child: Row(
children: <Widget>[Icon(Icons.add), Text("加好友")]),
//是否能夠選擇
enabled: true,
),
]),
],
),
),
);
}
}
複製代碼