Flutter 2. 常用組件

Flutter中一切皆組件(Widget)编饺,一個(gè)Flutter項(xiàng)目可以看作是大量的Widget堆砌而成饭玲,類似于堆樂高積木。

因?yàn)榫W(wǎng)上已經(jīng)有很多Flutter各組件的詳細(xì)使用已疯坤,所以此篇只羅列常用組件僧凤,以查漏補(bǔ)缺使用。

Flutter中的組件可以分為兩大類剩辟,一個(gè)是谷歌Material風(fēng)格的設(shè)計(jì)組件掐场,另一個(gè)是iOS風(fēng)格的組件。


一. Material風(fēng)格的組件

1. 容器組件 Container

容器組件會(huì)包含一個(gè)child組件贩猎,自身可以設(shè)置對齊方式熊户、padding、margin和背景顏色等吭服。

2. 圖片組件 Image

Image組件有多種構(gòu)造函數(shù)嚷堡,可以用不同方式加載圖片:

  • Image : 從ImageProvider獲取圖像
  • Image.asset: 加載資源圖片
  • Image.file: 加載本地圖片文件
  • Image.network: 加載網(wǎng)絡(luò)圖片
  • Image.memory: 加載Uint8List資源圖片

Image組件加載顯示圖片后,可以設(shè)置fit屬性來控制圖片的顯示方式:

  • BoxFit.fill 全圖充滿顯示艇棕,圖片可能拉伸
  • BoxFit.contain 全圖顯示蝌戒,按照原比例,不需要充滿
  • BoxFit.cover 顯示可能拉伸沼琉,可能裁剪北苟,充滿
  • BoxFit.fitWidth 寬度充滿,圖片可能會(huì)被拉伸或者裁剪
  • BoxFit.fitHeight 高度充滿打瘪,圖片可能會(huì)被拉伸或者裁剪
  • BoxFit.none 原始大小
  • BoxFit.scaleDown 類似于contain方式友鼻,但是不允許顯示超過原始圖片大小,即可小不可大

3. 文本組件 Text

顯示文字的組件...

4. 圖標(biāo)及按鈕組件

圖標(biāo)組件Icon為展示圖標(biāo)的組件闺骚,常用的有:

  • IconButton:可點(diǎn)擊的圖標(biāo)按鈕組件
  • Icons:Flutter自帶的圖標(biāo)集合
  • IconTheme: Icon主題
  • ImageIcon: 通過AssetImages或者其他圖片顯示圖標(biāo)

按鈕組件為可點(diǎn)擊響應(yīng)的組件桃移,類似于Icon組件:

  • IconButton: 可點(diǎn)擊的圖標(biāo)按鈕組件
  • RaisedButton: 凸起按鈕組件
  • FloatingActionButton懸停按鈕組件,Scaffold組件中設(shè)置
  • FlatButton扁平按鈕組件葛碧,點(diǎn)擊時(shí)候會(huì)有陰影效果

5. 列表組件

基礎(chǔ)列表組件為ListView借杰,可以設(shè)置水平或者垂直方向滾動(dòng)。
水平布局組件可以使用Row組件
垂直布局組件可以使用Column組件

當(dāng)數(shù)據(jù)過多进泼,比如通訊錄這種長列表的時(shí)候蔗衡,可以使用ListViewbuilder命名構(gòu)造方法纤虽,來構(gòu)造長列表。

當(dāng)數(shù)據(jù)過多绞惦,要用網(wǎng)格布局的時(shí)候逼纸,可以使用GridView組件。GridView創(chuàng)建方式有兩種:

  • 使用GridView.count通過單行展示個(gè)數(shù)來創(chuàng)建
  • 使用GridView.extent通過最大寬度來創(chuàng)建

6. 表單組件

表單里有兩個(gè)重要的組件济蝉,一個(gè)是Form用來提交表單杰刽,另一個(gè)是TextFormField組件用來輸入內(nèi)容的。

Form組件的常用屬性:

  • key 該組件在整個(gè)組件樹中的key值
  • autovalidate 是否自動(dòng)提交表單
  • onChanged 當(dāng)FormField值改變時(shí)的回調(diào)函數(shù)

TextFormField組件的常用屬性:

  • autovalidate自動(dòng)驗(yàn)證值
  • initialValue表單字段初始值
  • onSave 當(dāng)Form表單調(diào)用保存方法save時(shí)的回調(diào)函數(shù)
  • validatorForm表單驗(yàn)證器

對于輸入王滤,我們最關(guān)心的是驗(yàn)證輸入內(nèi)容是否合法贺嫂。為了獲取表單實(shí)例,我們需要設(shè)置一個(gè)全局key:

GlobalKey<FormState> key = GlobalKey<FormState>();

并把該key值賦值給Form組件的key屬性雁乡。

7. 裝飾類組件:

  • Opacity:透明度處理
  • DecoratedBox 裝飾盒子第喳,設(shè)置顏色、陰影踱稍、形狀曲饱、漸變和背景圖片等
  • RotatedBox 旋轉(zhuǎn)盒子
  • ClipOval: 圓形裁剪
  • ClipRRect: 圓角矩形裁剪
  • ClipRect: 矩形裁剪
  • ClipPath: 按照設(shè)置的路徑自定義裁剪,需要繼承自CustomerClipper類珠月,并且重寫getClip方法返回裁剪路徑扩淀,和重寫ShouldReclip方法返回true:
// 自定義裁剪
class MyClip extends CustomClipper {
  
  @override
  getClip(Size size) {
    
    Path path = Path();
    path.moveTo(10, 10);
    path.lineTo(10, 101);
    path.close();
    
    return path;
  }
  
  @override
  bool shouldReclip(CustomClipper oldClipper) {
    return true;
  }
}

8. 動(dòng)畫組件

常用的動(dòng)畫組件有:

  • AnimatedOpacity 實(shí)現(xiàn)漸變效果組件
  • Hero 頁面切換動(dòng)畫組件

????????????????? 其他組件 ?????????????????:

MaterailApp組件

代表一種設(shè)計(jì)風(fēng)格的組件。里面包含了所需要的各種基本組件啤挎。一個(gè)完整的Flutter項(xiàng)目就是從MaterailApp組件開始的
MaterailApp包括設(shè)置主頁驻谆,設(shè)置路由,自定義主題等侵浸。

Scaffold組件

腳手架組件顯示了material風(fēng)格的頁面布局,單個(gè)頁面的布局都可以使用該組件氛谜。
腳手架組件可以設(shè)置顯示 頂部導(dǎo)航欄 掏觉、 底部導(dǎo)航欄側(cè)拉抽屜

應(yīng)用按鈕組件(頂部導(dǎo)航欄組件)

應(yīng)用按鈕組件有AppBarSliverAppBar兩種。區(qū)別是AppBar是固定不動(dòng)的值漫,SliverAppBar可以隨著內(nèi)容滾動(dòng)而變化澳腹。
應(yīng)用按鈕組件中可以設(shè)置TabBar頂部導(dǎo)航欄。

底部導(dǎo)航組件

BottomNavigationBar組件是底部導(dǎo)航條杨何,可以瀏覽切換頂級視圖酱塔。

水平選項(xiàng)卡組件(TabBar)

水平選項(xiàng)卡組件類似于網(wǎng)易新聞主頁的各個(gè)新聞種類組件。
TabBar組件的使用危虱,需要用到DefaultTabController組件羊娃,他是關(guān)聯(lián)TabBarView組件和TabBar組件的橋梁。
實(shí)例代碼如下:

main () => runApp(MaterialApp(home: MyApp(),));

class MyApp extends StatelessWidget {

  final myTabs = [Tab(text: "體育",), Tab(text: "財(cái)經(jīng)",)];
  
  @override
  Widget build(BuildContext context) {

    return DefaultTabController(
      length: myTabs.length,
      child: Scaffold(
        appBar: AppBar(
          bottom: TabBar(tabs: myTabs),
        ),
        body: TabBarView(
            children: myTabs.map((Tab tab){
              return Text(tab.text);
        }).toList(),
        ),
      ),
    );
  }
}

抽屜組件Drawer

抽屜組件Drawer通常跟ListView組件配合使用

彈出菜單組件

PopupMenuButton為彈出菜單組件埃跷,通常放于頁面右上角蕊玷,表示更多的操作邮利。

簡單對話框組件

SimpleDialog為簡單對話框組件,于屏幕中彈出一個(gè)選擇或者展示列表垃帅,用來顯示附加的提示或者操作延届。
注意這個(gè)過程是異步的,需要加入async/await處理贸诚。

提示對話框組件

AlertDialog組件為提示對話框組件方庭,不僅有彈出提示,還有操作按鈕酱固,比如確定械念、取消。

輕量提示組件

SnakBar為輕量提示組件媒怯,于屏幕下方顯示订讼,常用于請求后的狀態(tài)提示等。

文本框組件

TextField為文本框組件扇苞,常用于做文本輸入欺殿。
如果想要獲取到文本的輸入內(nèi)容,需要綁定controller到TextField鳖敷,用來監(jiān)聽文本輸入內(nèi)容脖苏。

final TextEditingController controller = TextEditingController();

卡片組件

Card卡片組件常與ListTile組件一起使用。



二. Cupertino風(fēng)格的組件

Cupertino風(fēng)格主要是用來開發(fā)iOS時(shí)候使用定踱。

1. CupertinoActivityIndicator

一個(gè)iOS風(fēng)格的loading指示器棍潘,通常用來加載等待。

2. CupertinoAlertDialog

AlertView的組件
使用的時(shí)候崖媚,內(nèi)容部分可以用SingleChidlScrollView組件進(jìn)行包裹亦歉。操作按鈕可以用CupertinoDialogAction組件。

3. CupertinoButton

4.導(dǎo)航組件

  • CupertinoTabScaffold
  • CupertinoTabView
  • CupertinoPageScoffold
  • CupertinoNavigationBar
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畅哑,一起剝皮案震驚了整個(gè)濱河市肴楷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荠呐,老刑警劉巖赛蔫,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泥张,居然都是意外死亡呵恢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門媚创,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渗钉,“玉大人,你說我怎么就攤上這事钞钙∩我Γ” “怎么了粤剧?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挥唠。 經(jīng)常有香客問我抵恋,道長,這世上最難降的妖魔是什么宝磨? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任弧关,我火速辦了婚禮,結(jié)果婚禮上唤锉,老公的妹妹穿的比我還像新娘世囊。我一直安慰自己,他們只是感情好窿祥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布株憾。 她就那樣靜靜地躺著,像睡著了一般晒衩。 火紅的嫁衣襯著肌膚如雪嗤瞎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天听系,我揣著相機(jī)與錄音贝奇,去河邊找鬼。 笑死靠胜,一個(gè)胖子當(dāng)著我的面吹牛掉瞳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浪漠,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼陕习,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了址愿?” 一聲冷哼從身側(cè)響起该镣,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎必盖,沒想到半個(gè)月后拌牲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俱饿,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歌粥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拍埠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片失驶。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枣购,靈堂內(nèi)的尸體忽然破棺而出嬉探,到底是詐尸還是另有隱情擦耀,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布涩堤,位于F島的核電站眷蜓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胎围。R本人自食惡果不足惜吁系,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望白魂。 院中可真熱鬧汽纤,春花似錦、人聲如沸福荸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敬锐。三九已至背传,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滞造,已是汗流浹背续室。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谒养,地道東北人挺狰。 一個(gè)月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像买窟,于是被迫代替她去往敵國和親丰泊。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 國慶后面兩天在家學(xué)習(xí)整理了一波flutter始绍,基本把能擼過能看到的代碼都過了一遍瞳购,此文篇幅較長,建議保存(star...
    Nealyang閱讀 4,345評論 1 17
  • 以下內(nèi)容基本翻譯自A Tour of the Flutter Widget Framework亏推,翻譯的可能并不完全...
    INeil閱讀 10,269評論 0 4
  • 1.Widge組件分類 在flutter中学赛,所有UI元素都是widget組件,除了我們常見的button吞杭,Imag...
    zzzworm閱讀 5,630評論 1 2
  • 本文主要大致介紹Flutter 整體框架盏浇,簡單粗略的使用,深度暫且還沒有芽狗。用Dart绢掰,寫了個(gè)計(jì)算器的demo和列表...
    空而小sao閱讀 1,984評論 0 0
  • 10職場小白成長記 電話接通的剎那,虎妞大腦一片空白,她給客戶打電話的目的是什么來著滴劲?要說什么攻晒?在對方“喂”了兩聲...
    哚吖閱讀 277評論 0 0