第八節(jié):Flutter中Button按鈕

1. 對于Flutter中按鈕的認識

1.1 Flutter中的按鈕

Flutter里有很多的Button組件,常見的按鈕組件有:RaisedButton, FlatButton,IconButton,OutlineButton, ButtonBar, FloatingActionButton等

說明:

  1. RaisedButton : 凸起的按鈕,其實就是Material Design 風格發(fā)Button
  2. FlatButton: 扁平化的按鈕
  3. OutlineButton: 線框按鈕
  4. IconButton : 圖標按鈕
  5. ButtonBar: 按鈕組
  6. FloatingActionButton: 浮動按鈕

按鈕源碼中的所有屬性

const RaisedButton({
    Key key,
    @required VoidCallback onPressed,
    VoidCallback onLongPress,
    ValueChanged<bool> onHighlightChanged,
    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.2 Flutter中按鈕的屬性

Flutter 按鈕組件中的一些屬性

屬性名稱 值的類型 屬性值
onPressed VoildCallback,接受一個方法 必填參數(shù),按鈕按下時觸發(fā)的回調(diào),<br />傳null表示按鈕禁用
child Widget 文本控件
textColor Color 文本顏色
color Color 按鈕顏色
disabledColor Color 按鈕禁用時文本顏色
splashColor Color 點擊按鈕是水波紋的顏色
highlightColor Color 點擊按鈕后按鈕的顏色
elevation double 陰影的范圍,值越大范圍越大
padding 內(nèi)邊距
Shape 設(shè)置按鈕的形狀


1.3 圓角和圓形圓形

Shape按鈕的形狀

1.圓角按鈕

shape:RoundedRectangleBorder(
    borderRadius: BorderRadius.circular(10)
)

2.圓形按鈕

shape: CircleBorder(
    side: BorderSide(
        color: Colors.white
    )
)


2. Flutter按鈕屬性的使用

我們以RiasedButton 按鈕為例,理解屬性的使用和意思, 其他按鈕也一樣

2.1 禁用按鈕

如果沒有添加onPressed屬性,按鈕默認為禁用按鈕

通常禁用按鈕會選擇將onPressed屬性值設(shè)置為null

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    onPressed: (){    // 如果使用onPressed, 則為禁用按鈕,
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}


2.2 按鈕禁用時的文字顏色
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    disabledColor:Colors.pink,  // 按鈕禁用時的顏色
                    disabledTextColor: Colors.green, // 按鈕禁用時的文本顏色
                    onPressed: null  // 禁用按鈕
                )
            )
        );
    }
}


2.3 普通按鈕

只使用onPressed屬性,按鈕為可以用按鈕,其他樣式為默認的

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(
            child: Container(

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    onPressed: (){    // 如果使用onPressed, 則為禁用按鈕
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}


2.4 添加按鈕顏色和文字顏色
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    color:Colors.blue,        // 按鈕顏色
                    textColor: Colors.white,  // 按鈕文字顏色
                    onPressed: (){    // 如果使用onPressed, 則為禁用按鈕
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}


2.5 按鈕的陰影
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    color:Colors.blue,        // 按鈕顏色
                    textColor: Colors.white,  // 按鈕文字顏色
                    elevation: 30.0,          // 按鈕的陰影
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}


2.6 修改按鈕按下時的顏色
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    color:Colors.blue,        // 按鈕顏色
                    textColor: Colors.white,  // 按鈕文字顏色
                    elevation: 30.0,          // 按鈕的陰影
                    highlightColor: Colors.green,  // 按鈕按下的顏色
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}


2.7 按鈕的水波顏色
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    color:Colors.blue,        // 按鈕顏色
                    textColor: Colors.white,  // 按鈕文字顏色
                    elevation: 30.0,          // 按鈕的陰影
                    highlightColor: Colors.green,  // 按鈕按下的顏色
                    splashColor:Colors.red,     // 按鈕的水波顏色
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}


2.8 設(shè)置按鈕的大小

在按鈕的參數(shù)中沒有修改按鈕大小的配置, 如果需要修改按鈕大小

則需要將按鈕放在容器中, 改變?nèi)萜鞯拇笮?/p>

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,進而修改按鈕的大小
                height:50.0,
                width:100.0,

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    color:Colors.blue,        // 按鈕顏色
                    textColor: Colors.white,  // 按鈕文字顏色
                    elevation: 30.0,          // 按鈕的陰影
                    highlightColor: Colors.green,  // 按鈕按下的顏色
                    splashColor:Colors.red,     // 按鈕的水波顏色
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}



2.9 圓角和圓形按鈕

通過shape參數(shù)來修改圓角和圓形按鈕

圓角按鈕(用的比較多)

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,進而修改按鈕的大小
                height:50.0,
                width:100.0,

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    color:Colors.blue,        // 按鈕顏色
                    textColor: Colors.white,  // 按鈕文字顏色
                    elevation: 30.0,          // 按鈕的陰影
                    highlightColor: Colors.green,  // 按鈕按下的顏色
                    splashColor:Colors.red,     // 按鈕的水波顏色
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(20)
                    ),
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}

圓形按鈕

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,進而修改按鈕的大小
                height:50.0,
                width:100.0,

                // 按鈕
                child: RaisedButton(
                    child:Text("普通按鈕"),
                    color:Colors.blue,        // 按鈕顏色
                    textColor: Colors.white,  // 按鈕文字顏色
                    elevation: 30.0,          // 按鈕的陰影
                    highlightColor: Colors.green,  // 按鈕按下的顏色
                    splashColor:Colors.red,     // 按鈕的水波顏色
                    shape:CircleBorder(
                        side: BorderSide(
                            color:Colors.white
                        )
                    ),
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("普通按鈕");
                    }
                )
            )
        );
    }
}



3. Flutter其他按鈕的使用

3.1 FlatButton

扁平按鈕鹰霍,默認背景透明并不帶陰影府寒。按下后,會有背景色

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,進而修改按鈕的大小
                height:50.0,
                width:100.0,

                // 按鈕
                child: FlatButton(
                    child:Text("扁平按鈕"),
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("扁平按鈕");
                    }
                )
            )
        );
    }
}


3.2 OutlineButton 邊框按鈕

默認有一個邊框睛低,不帶陰影且背景透明谎痢。按下后磕昼,邊框顏色會變亮、同時出現(xiàn)背景和陰影(較弱)节猿,

color參數(shù)無效

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,進而修改按鈕的大小
                height:50.0,
                width:100.0,

                // 按鈕
                child: OutlineButton(
                    child:Text("扁平按鈕"),
                    color:Colors.blue,        // 按鈕顏色無效
                    highlightColor: Colors.green,  // 按鈕按下的顏色
                    splashColor:Colors.red,     // 按鈕的水波顏色

                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("扁平按鈕");
                    }
                )
            )
        );
    }
}


3.3 IconButton 圖標按鈕

IconButton是一個可點擊的Icon票从,不包括文字,默認沒有背景滨嘱,點擊后會出現(xiàn)背景峰鄙,

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(
            child: Container(
                // 修改容器大小,進而修改按鈕的大小
                height:50.0,
                width:100.0,

                // 按鈕
                child: IconButton(
                    icon:Icon(Icons.search),
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("圖標按鈕");
                    }
                )
            )
        );
    }
}


3.4 帶圖標的按鈕

RaisedButtonFlatButton太雨、OutlineButton都有一個icon 構(gòu)造函數(shù)吟榴,通過它可以輕松創(chuàng)建帶圖標的按鈕,

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,進而修改按鈕的大小
                height:50.0,
                width:100.0,

                // 帶圖標的按鈕
                child: RaisedButton.icon(

                    icon:Icon(Icons.search),
                    label:Text("搜索"),
                    color:Colors.blue,
                    textColor: Colors.white,
                    onPressed: (){    //  如果使用onPressed, 則為禁用按鈕
                        print("搜索");
                    }
                )
            )
        );
    }
}


至于按鈕組和浮動按鈕,后面再說

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囊扳,一起剝皮案震驚了整個濱河市吩翻,隨后出現(xiàn)的幾起案子梅惯,更是在濱河造成了極大的恐慌,老刑警劉巖仿野,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異她君,居然都是意外死亡脚作,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門缔刹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來球涛,“玉大人,你說我怎么就攤上這事校镐∫诒猓” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵鸟廓,是天一觀的道長从祝。 經(jīng)常有香客問我,道長引谜,這世上最難降的妖魔是什么牍陌? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮员咽,結(jié)果婚禮上毒涧,老公的妹妹穿的比我還像新娘。我一直安慰自己贝室,他們只是感情好契讲,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滑频,像睡著了一般捡偏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峡迷,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天霹琼,我揣著相機與錄音,去河邊找鬼凉当。 笑死枣申,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的看杭。 我是一名探鬼主播忠藤,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼楼雹!你這毒婦竟也來了模孩?” 一聲冷哼從身側(cè)響起尖阔,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榨咐,沒想到半個月后介却,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡块茁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年齿坷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片数焊。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡永淌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佩耳,到底是詐尸還是另有隱情遂蛀,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布干厚,位于F島的核電站李滴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛮瞄。R本人自食惡果不足惜悬嗓,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裕坊。 院中可真熱鬧包竹,春花似錦、人聲如沸籍凝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饵蒂。三九已至声诸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間退盯,已是汗流浹背彼乌。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渊迁,地道東北人慰照。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像琉朽,于是被迫代替她去往敵國和親毒租。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348