Flutter Widget:實(shí)例講解按鈕組件 - RaisedButton感昼、FlatButton、OutlineButton肋演、IconButton


前言

Flutter 作為Google出品的一個(gè)新興的跨平臺(tái)移動(dòng)客戶端UI開(kāi)發(fā)框架抑诸,正在被越來(lái)越多的開(kāi)發(fā)者和組織使用,包括阿里的咸魚(yú)爹殊、騰訊的微信等蜕乡。

示意圖

今天,我主要講解Flutter中按鈕方面的Widget梗夸,包括:

  • RaisedButton:凸起层玲、有陰影 - 繼承自MaterialButton
  • FlatButton:扁平、無(wú)陰影 - 繼承自MaterialButton
  • OutlineButton:帶邊框 - 繼承自MaterialButton
  • IconButton:帶圖標(biāo) - 繼承自StatelessWidget

希望你們會(huì)喜歡反症。

示意圖

1. RaisedButton

  • 核心屬性
 const RaisedButton({
    Key key,
    @required VoidCallback onPressed, // 按下按鈕的回調(diào)
    Widget child, // 子控件辛块,一般是傳入一個(gè)TextWidget
    Color textColor, // 文本顏色
    Color disabledTextColor, /// 禁用時(shí)文本的顏色
    Color color, // 按鈕顏色
    Color disabledColor,// 禁用時(shí)的按鈕顏色
    Color highlightColor, // 點(diǎn)擊 / 長(zhǎng)按的顏色
    Color splashColor, // 點(diǎn)擊時(shí)水波紋顏色
    double elevation, // 陰影范圍,值大 - 范圍越大
    double highlightElevation,
    double disabledElevation,
    EdgeInsetsGeometry padding, // 內(nèi)邊距铅碍,接受的類(lèi)型是:EdgeInsetsGeometry類(lèi)型
    ShapeBorder shape, // 按鈕形狀润绵,主要分為:BeveledRectangleBorder(帶斜角的長(zhǎng)方形邊框)、CircleBorder(圓形邊框)胞谈、RoundedRectangleBorder(圓角矩形)尘盼、StadiumBorder(兩端是半圓的邊框)
    Clip clipBehavior = Clip.none,
    MaterialTapTargetSize materialTapTargetSize,
    Duration animationDuration,
  })
  • 具體使用
/**
 *  導(dǎo)入庫(kù)
 **/
import 'package:flutter/material.dart';// Material UI組件庫(kù)

void main() => runApp(MyApp());

// 無(wú)狀態(tài)控件顯示
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
// 主界面入口返回的組件 = MaterialApp
    return MaterialApp(
      title: 'Widget_Demo', //標(biāo)題
      theme: ThemeData(primarySwatch: Colors.blue), //主題色
      home: MyHomePage(), // 返回一個(gè)Widget對(duì)象,用來(lái)定義當(dāng)前應(yīng)用打開(kāi)的時(shí)候烦绳,所顯示的界面
    );
  }
}

// 返回的Widget對(duì)象
class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //設(shè)置appbar
      appBar: new AppBar(
        title: new Text('Flutter Demo'),
      ),
      //主體
      body: new RaisedButton(
        color: Colors.red, // 按鈕顏色
        splashColor: Colors.black, // 水波紋顏色
        highlightColor: Colors.green, // 長(zhǎng)按樣式
        textColor: Colors.white, // 文本顏色
        child: Text("RaiseButton"), // 按鈕字樣
        padding: EdgeInsets.fromLTRB(0,5,6,7),// 設(shè)置四個(gè)方向的內(nèi)邊距
        shape: RoundedRectangleBorder( // 設(shè)置按鈕形狀為圓角矩形
          borderRadius: BorderRadius.all(Radius.circular(10)),
        ),
        onPressed: _pressCallBack, // 點(diǎn)擊事件
      ),
    );
  }

  _pressCallBack() {
    print("點(diǎn)擊了按鈕");
  }

}
  • 效果圖

2. FlatButton

  • 定義
    扁平卿捎、無(wú)陰影 - 繼承自MaterialButton
  • 具體使用
    與RaisedButton的屬性設(shè)置十分類(lèi)似,此處僅作展示
import 'package:flutter/material.dart';// Material UI組件庫(kù)

void main() => runApp(MyApp());

// 無(wú)狀態(tài)控件顯示
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
// 主界面入口返回的組件 = MaterialApp
    return MaterialApp(
      title: 'Widget_Demo', //標(biāo)題
      theme: ThemeData(primarySwatch: Colors.blue), //主題色
      home: MyHomePage(), // 返回一個(gè)Widget對(duì)象径密,用來(lái)定義當(dāng)前應(yīng)用打開(kāi)的時(shí)候午阵,所顯示的界面
    );
  }
}

// 返回的Widget對(duì)象
class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //設(shè)置appbar
      appBar: new AppBar(
        title: new Text('Flutter Demo'),
      ),
      //主體
      body: new FlatButton(
        color: Colors.red, // 按鈕顏色
        splashColor: Colors.black, // 水波紋顏色
        highlightColor: Colors.green, // 長(zhǎng)按樣式
        textColor: Colors.white, // 文本顏色
        child: Text("FlatButton"), // 按鈕字樣
        padding: EdgeInsets.fromLTRB(0,5,6,7),// 設(shè)置四個(gè)方向的內(nèi)邊距
        shape: RoundedRectangleBorder( // 設(shè)置按鈕形狀為圓角矩形
          borderRadius: BorderRadius.all(Radius.circular(10)),
        ),
        onPressed: _pressCallBack, // 點(diǎn)擊事件
      ),
    );
  }

  _pressCallBack() {
    print("點(diǎn)擊了按鈕");
  }

}

3. OutlineButton

  • 定義
    帶邊框 - 繼承自MaterialButton
  • 具體使用
    與RaisedButton的屬性設(shè)置十分類(lèi)似,此處僅作展示
import 'package:flutter/material.dart';// Material UI組件庫(kù)

void main() => runApp(MyApp());

// 無(wú)狀態(tài)控件顯示
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
// 主界面入口返回的組件 = MaterialApp
    return MaterialApp(
      title: 'Widget_Demo', //標(biāo)題
      theme: ThemeData(primarySwatch: Colors.blue), //主題色
      home: MyHomePage(), // 返回一個(gè)Widget對(duì)象享扔,用來(lái)定義當(dāng)前應(yīng)用打開(kāi)的時(shí)候底桂,所顯示的界面
    );
  }
}

// 返回的Widget對(duì)象
class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //設(shè)置appbar
      appBar: new AppBar(
        title: new Text('Flutter Demo'),
      ),
      //主體
      body: new OutlineButton(
        borderSide:new BorderSide(color: Colors.red), // 自定義邊框顏色&樣式
        splashColor: Colors.black, // 水波紋顏色
        highlightColor: Colors.green, // 長(zhǎng)按樣式
        textColor: Colors.red, // 文本顏色
        child: Text("OutlineButton"), // 按鈕字樣
        padding: EdgeInsets.fromLTRB(0,5,6,7),// 設(shè)置四個(gè)方向的內(nèi)邊距
        shape: RoundedRectangleBorder( // 設(shè)置按鈕形狀為圓角矩形
          borderRadius: BorderRadius.all(Radius.circular(10)),
        ),
        onPressed: _pressCallBack, // 點(diǎn)擊事件
      ),
    );
  }

  _pressCallBack() {
    print("點(diǎn)擊了按鈕");
  }

}

4. IconButton

  • 定義
    帶圖標(biāo) - 繼承自StatelessWidget
  • 具體使用
    與RaisedButton的屬性設(shè)置十分類(lèi)似,此處僅作展示
import 'package:flutter/material.dart';// Material UI組件庫(kù)

void main() => runApp(MyApp());

// 無(wú)狀態(tài)控件顯示
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
// 主界面入口返回的組件 = MaterialApp
    return MaterialApp(
      title: 'Widget_Demo', //標(biāo)題
      theme: ThemeData(primarySwatch: Colors.blue), //主題色
      home: MyHomePage(), // 返回一個(gè)Widget對(duì)象惧眠,用來(lái)定義當(dāng)前應(yīng)用打開(kāi)的時(shí)候籽懦,所顯示的界面
    );
  }
}

// 返回的Widget對(duì)象
class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //設(shè)置appbar
      appBar: new AppBar(
        title: new Text('Flutter Demo'),
      ),
      //主體
      body: new IconButton(
        icon:Icon(Icons.add),
        color: Colors.blue, // 按鈕顏色
        splashColor: Colors.black, // 水波紋顏色
        highlightColor: Colors.green, // 長(zhǎng)按樣式
        onPressed: _pressCallBack, // 點(diǎn)擊事件
      ),
    );
  }

  _pressCallBack() {
    print("點(diǎn)擊了按鈕");
  }
}

5. 總結(jié)

  • 本文主要講解了Flutter中按鈕組件方面的Widget,包括RaisedButton锉试、FlatButton猫十、OutlineButton览濒、IconButton
  • 接下來(lái)推出的文章,我將繼續(xù)講解Flutter的相關(guān)知識(shí)拖云,包括更多的Widget用法贷笛、實(shí)例應(yīng)用等,感興趣的讀者可以繼續(xù)關(guān)注我的博客哦:Carson_Ho的Android博客

請(qǐng)點(diǎn)贊宙项!因?yàn)槟銈兊馁澩?鼓勵(lì)是我寫(xiě)作的最大動(dòng)力乏苦!

相關(guān)文章閱讀
Android開(kāi)發(fā):最全面、最易懂的Android屏幕適配解決方案
Android開(kāi)發(fā):史上最全的Android消息推送解決方案
Android開(kāi)發(fā):最全面尤筐、最易懂的Webview詳解
Android開(kāi)發(fā):JSON簡(jiǎn)介及最全面解析方法!
Android四大組件:Service服務(wù)史上最全面解析
Android四大組件:BroadcastReceiver史上最全面解析


歡迎關(guān)注Carson_Ho的簡(jiǎn)書(shū)汇荐!

不定期分享關(guān)于安卓開(kāi)發(fā)的干貨,追求短盆繁、平掀淘、快,但卻不缺深度油昂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末革娄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冕碟,更是在濱河造成了極大的恐慌拦惋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件安寺,死亡現(xiàn)場(chǎng)離奇詭異厕妖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)挑庶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)言秸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挠羔,你說(shuō)我怎么就攤上這事井仰÷袂叮” “怎么了破加?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)雹嗦。 經(jīng)常有香客問(wèn)我范舀,道長(zhǎng),這世上最難降的妖魔是什么了罪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任锭环,我火速辦了婚禮,結(jié)果婚禮上泊藕,老公的妹妹穿的比我還像新娘辅辩。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布玫锋。 她就那樣靜靜地躺著蛾茉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撩鹿。 梳的紋絲不亂的頭發(fā)上谦炬,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音节沦,去河邊找鬼键思。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甫贯,可吹牛的內(nèi)容都是我干的吼鳞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼叫搁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赖条!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起常熙,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纬乍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后裸卫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體仿贬,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年墓贿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茧泪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聋袋,死狀恐怖队伟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幽勒,我是刑警寧澤嗜侮,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站啥容,受9級(jí)特大地震影響锈颗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咪惠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一击吱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遥昧,春花似錦覆醇、人聲如沸朵纷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柴罐。三九已至,卻和暖如春憨奸,著一層夾襖步出監(jiān)牢的瞬間革屠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工排宰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留似芝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓板甘,卻偏偏與公主長(zhǎng)得像党瓮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盐类,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354