Flutter之常用布局組件

項目演示github地址

Flutter for Android 開發(fā)者

用Android布局的角度來看Flutter

Flutter控件 Android控件
AppBar ActionBar/ToolBar
ListView,GridView ListView/RecyclerView
Text TextView
Center ViewGroup
Container RelativeLayout
FloatingActionButton FloatingActionButton(design庫里面的)
BottomNavigationBar BottomNavigation(design庫里面的)
RaisedButton/Button Button
Column LinearLayout的android:orientation="vertical"
Row android:orientation="horizontal"
DecorationImage ImageView
Image ImageView
Stack FrameLayout/RelativeLayout
Algin alginParentXXX屬性
resizeToAvoidBottomPadding android:windowSoftInputMode=”adjustResize屬性
SingleChildScrollView ScrollView
Stack FrameLayout
SizeBox Layout固定寬高
Alignment 對齊方式
CustomScrollerView拴清,slivers 復(fù)雜的滑動嵌套布局
SliverAppBar CollapsingToolbarLayout,實現(xiàn)AppBar展開/收起的功能会通, 相對于 AppBar 位置的固定的應(yīng)用最上面的口予;而 SliverAppBar 是可以跟隨內(nèi)容滾動的。
Positioned 確定某一個View的具體坐標(biāo)
Expanded Row涕侈、Column沪停、Flex會被Expanded撐開,充滿主軸可用空間裳涛。
Clip 小碎片木张,類似流式布局里面的Item
Warp 包裹的小部件超過屏幕寬度后換行
Step 步驟,類似快遞物流效果
Card 類似CardView效果
ClipRRect 給圖片加圓角
ListTile 固定樣式的view 左邊圖片 右邊可設(shè)置標(biāo)題 副標(biāo)題
DataTable 表格 參考
PaginatedDataTable 分頁表格參考

Flutter控件本身通常由許多小型端三、單用途的控件組成舷礼,結(jié)合起來產(chǎn)生強(qiáng)大的效果,例如技肩,Container是一種常用的控件且轨,由負(fù)責(zé)布局、繪畫虚婿、定位和大小調(diào)整的幾個控件組成旋奢,具體來說,Container是由LimitedBox然痊、ConstrainedBox至朗、 Align、Padding剧浸、DecoratedBox和Transform控件組成锹引,而不是將Container子類化來產(chǎn)生自定義效果,您可以用這種新穎的方式組合這些以及其他簡單的控件唆香。

在寫應(yīng)用程序時嫌变,經(jīng)常會使用StatelessWidget和StatefulWidget編寫新控件,兩者的差別在于你是否要管理控件的狀態(tài)躬它。一個控件的主要任務(wù)是實現(xiàn)build函數(shù)腾啥,定義控件中其他較低層次的控件。build函數(shù)將依次構(gòu)建這些控件,直到底層渲染對象倘待。

  • Scaffold

Scaffold 實現(xiàn)了基本的Material Design布局結(jié)構(gòu)疮跑。也就是說, MaterialApp 的 child 是 Scaffold Widget凸舵。
在Material設(shè)計中定義的單個界面上的各種布局元素祖娘,在 Scaffold 中都有支持,比如 左邊欄(Drawers)啊奄、snack bars渐苏、以及 bottom sheets。
Scaffold 有下面幾個主要屬性:

1增热、appBar:顯示在界面頂部的一個 AppBar整以,也就是 Android 中的 ActionBar 胧辽、Toolbar峻仇。
2、body:當(dāng)前界面所顯示的主要內(nèi)容 Widget邑商。
3摄咆、floatingActionButton:Material設(shè)計中所定義的 FAB,界面的主要功能按鈕人断。
4吭从、persistentFooterButtons:固定在下方顯示的按鈕,比如對話框下方的確定恶迈、取消按鈕涩金。
5、drawer:側(cè)邊欄控件暇仲。
6步做、backgroundColor: 內(nèi)容的背景顏色,默認(rèn)使用的是 ThemeData.scaffoldBackgroundColor 的值奈附。
7全度、bottomNavigationBar: 顯示在頁面底部的導(dǎo)航欄。
8斥滤、resizeToAvoidBottomPadding:類似于 Android 中的
9将鸵、android:windowSoftInputMode=”adjustResize”,控制界面內(nèi)容 body 是否重新布局來避免底部被覆蓋了佑颇,比如當(dāng)鍵盤顯示的時候顶掉,重新布局避免被鍵盤蓋住內(nèi)容。默認(rèn)值為 true挑胸。

  • Appbar

AppBar 和 SliverAppBar 是Material Design中的 App Bar痒筒,也就是 Android 中的 Toolbar,關(guān)于 Toolbar 的設(shè)計指南請參考Material Design中 Toolbar 的內(nèi)容。
AppBar 和 SliverAppBar 都是繼承StatefulWidget 類凸克,都代表 Toobar议蟆,二者的區(qū)別在于 AppBar 位置的固定的應(yīng)用最上面的;而 SliverAppBar 是可以跟隨內(nèi)容滾動的萎战。

他們的主要屬性如下:
1咐容、 leading:在標(biāo)題前面顯示的一個控件,在首頁通常顯示應(yīng)用的 logo蚂维;在其他界面通常顯示為返回按鈕
2戳粒、 title: Toolbar 中主要內(nèi)容,通常顯示為當(dāng)前界面的標(biāo)題文字虫啥。
3蔚约、actions:一個 Widget 列表,代表 Toolbar 中所顯示的菜單涂籽,對于常用的菜單苹祟,通常使用。4评雌、IconButton 來表示树枫;對于不常用的菜單通常使用 PopupMenuButton 來顯示為三個點,點擊后彈出二級菜單景东。
5砂轻、 bottom:一個 AppBarBottomWidget 對象,通常是 TabBar斤吐。用來在 Toolbar 標(biāo)題下面顯示一個 Tab 導(dǎo)航欄搔涝。
6、elevation:紙墨設(shè)計中控件的 z 坐標(biāo)順序和措,默認(rèn)值為 4庄呈,對于可滾動的 SliverAppBar,當(dāng) SliverAppBar 和內(nèi)容同級的時候臼婆,該值為 0抒痒, 當(dāng)內(nèi)容滾動 SliverAppBar 變?yōu)?Toolbar 的時候,修改 elevation 的值 flexibleSpace:一個顯示在 AppBar 下方的控件颁褂,高度和 AppBar 高度一樣故响,可以實現(xiàn)一些特殊的效果,該屬性通常在 SliverAppBar 中使用
7颁独、backgroundColor:APP bar 的顏色彩届,默認(rèn)值為 ThemeData.primaryColor。改值通常和下面的三個屬性一起使用
8誓酒、 brightness:App bar 的亮度樟蠕,有白色和黑色兩種主題贮聂,默認(rèn)值為 ThemeData.primaryColorBrightness
9、 iconTheme:App bar 上圖標(biāo)的顏色寨辩、透明度吓懈、和尺寸信息。默認(rèn)值為 ThemeData.primaryIconTheme
10靡狞、 textTheme: App bar 上的文字樣式耻警。默認(rèn)值為 ThemeData.primaryTextTheme
11、 centerTitle: 標(biāo)題是否居中顯示甸怕,默認(rèn)值根據(jù)不同的操作系統(tǒng)甘穿,顯示方式不一樣

基本組件

ClipRRect 給圖片加圓角


 child: ClipRRect(
                      borderRadius: BorderRadius.only(
                        topLeft: Radius.circular(4.0),
                        topRight: Radius.circular(4.0),
                      ),
                      child: Image.network(
                        'http://img3.3lian.com/2013/c4/95/d/18.jpg',
                        fit: BoxFit.cover,
                      ),
                    ),
  • Container
    容器,一個常用的控件梢杭,由基本的繪制温兼、位置和大小控件組成。負(fù)責(zé)創(chuàng)建矩形的可視元素武契,可以用BoxDecoration來設(shè)計樣式募判,比如背景、邊框和陰影吝羞,Container也有邊距兰伤、填充和大小限制内颗,另外钧排,還可以在三維空間利用矩陣進(jìn)行變換。

沒有子控件的容器盡可能大均澳,除非傳入的大小約束是無限的恨溜,在這種情況下,它們盡可能小找前。有子控件的容器將自己的尺寸給他們的孩子糟袁。我們可以通過width、height和 constraints屬性控制size躺盛。

  • BoxDecoration
    裝飾器项戴,可以用來修飾其他的組件,和Android里面的shape很相似
    const BoxDecoration({
    this.color,//背景色
    this.image,//圖片
    this.border,//描邊
    this.borderRadius,//圓角大小
    this.boxShadow,//陰影
    this.gradient,//過度效果
    this.backgroundBlendMode,
    this.shape = BoxShape.rectangle,//形狀,BoxShape.circle和borderRadius不能同時使用
    })
  • SizedBox
    SizedBox控件能強(qiáng)制子控件具有特定寬度槽惫、高度或兩者都有
    類似線性布局制定高寬
 body: new SizedBox(
        width: 250.0,
        height: 250.0,
        child: new Container(
          decoration: new BoxDecoration(
            backgroundColor: Colors.lightBlueAccent[100],
          ),
        ),
      ),
    );
  • AspectRatio
    AspectRatio控件能強(qiáng)制子小部件的寬度和高度具有給定的寬高比周叮,以寬度與高度的比例表示。
 body: new AspectRatio(
        aspectRatio: 3.0 / 2.0,
        child: new Container(
          decoration: new BoxDecoration(
            backgroundColor: Colors.lightBlueAccent[100],
          ),
        ),
      ),
    );
  • Row
    flex水平布局控件界斜,能夠?qū)⒆涌丶脚帕蟹碌ⅲ腔赪eb的flexbox的布局模式設(shè)計的。
    Row子控件有靈活與不靈活的兩種各薇,Row首先列出不靈活的子控件项贺,減去它們的總寬度,計算還有多少可用的空間。然后Row按照Flexible.flex屬性確定的比例在可用空間中列出靈活的子控件开缎。要控制靈活子控件棕叫,需要使用Expanded控件。
    注意該控件不支持滑動奕删,如果子控件超過剩余空間谍珊,會報錯,如果想支持水平滑動急侥,考慮使用ListView砌滞。
    如果只有一個子控件,可以使用 Align or Center控件定義該子控件位置坏怪。
new Row(
  children: <Widget>[
    new Expanded(
      child: new Text('Deliver features faster', textAlign: TextAlign.center),
    ),
    new Expanded(
      child: new Text('Craft beautiful UIs', textAlign: TextAlign.center),
    ),
    new Expanded(
      child: new FittedBox(
        fit: BoxFit.contain, // otherwise the logo will be tiny
        child: const FlutterLogo(),
      ),
    ),
  ],
)
  • Column
    flex垂直布局控件贝润,能夠?qū)⒆涌丶怪迸帕小?br> 用法與Row控件一樣。

  • Image
    顯示圖像的控件铝宵,Image控件有多種構(gòu)造函數(shù):
    new Image打掘,用于從ImageProvider獲取圖像。
    new Image.asset鹏秋,用于使用key從AssetBundle獲取圖像尊蚁。
    new Image.network,用于從URL地址獲取圖像侣夷。
    new Image.file横朋,用于從File獲取圖像。

Image里面的BoxFit參數(shù)介紹:(相當(dāng)于Android的ImageView的scaleType參數(shù))

fill 通過篡改原始寬高比來填充目標(biāo)box
contain 在盡可能大的情況下百拓,仍然將源完全包含在目標(biāo)框中琴锭。
cover 盡可能小,同時仍然覆蓋整個目標(biāo)框衙传。
fitWidth 確保顯示源的全部寬度决帖,而不管這是否意味著源垂直溢出目標(biāo)框。
fitHeight 確保顯示源的全部高度蓖捶,而不管這是否意味著源水平地溢出目標(biāo)框地回。
none 在目標(biāo)框中對齊源(默認(rèn)為居中),并放棄位于框外的源的任何部分俊鱼。源圖像未調(diào)整大小刻像。
scaleDown 在目標(biāo)框中對齊源(默認(rèn)為居中),如果需要亭引,將源縮小以確保源適合該框绎速。這與contain的內(nèi)容相同,如果該內(nèi)容會收縮圖像焙蚓,那么它就是none纹冤。

-MainAxisAlignment和CrossAxisAlignment簡介
MainAxisAlignment(主軸)和CrossAxisAlignment(交叉軸)常用于Row和Column控件中洒宝,主要是用來控制子控件排列的位置,并可以配合textDirection和verticalDirection屬性來控制子控件排列的方向及改變MainAxisAlignment和CrossAxisAlignment的起始位置萌京。

enum MainAxisAlignment {
 //將子控件放在主軸的開始位置
  start,  
   //將子控件放在主軸的結(jié)束位置
  end,
  //將子控件放在主軸的中間位置
  center,
  //將主軸空白位置進(jìn)行均分雁歌,排列子元素,手尾沒有空隙
  spaceBetween,
  //將主軸空白區(qū)域均分知残,使中間各個子控件間距相等靠瞎,首尾子控件間距為中間子控件間距的一半
  spaceAround,
  //將主軸空白區(qū)域均分,使各個子控件間距相等
  spaceEvenly,
}
  • Expanded組件可以使Row求妹、Column乏盐、Flex等子組件在其主軸方向上展開并填充可用空間(例如,Row在水平方向制恍,Column在垂直方向)父能。如果多個子組件展開,可用空間會被其flex factor(表示擴(kuò)展的速度净神、比例)分割
  • Text
    用來顯示文本的控件何吝,當(dāng)然還有很多樣式,具體請看源碼
      new Text("hello_word",
            textDirection: TextDirection.ltr,
            style: TextStyle(
              decoration: TextDecoration.overline,
              fontSize: 40.0,
              fontWeight: FontWeight.bold,
              color: Colors.black87,
            ))
  • Icon
    圖標(biāo)控件鹃唯,按照IconData中所描述的規(guī)則繪制爱榕,顯示Material中預(yù)定義的IconDatas。
 new Icon(Icons.pool, size: 32.0, color: Colors.white),
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坡慌,一起剝皮案震驚了整個濱河市黔酥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌八匠,老刑警劉巖絮爷,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梨树,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)岖寞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門抡四,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仗谆,你說我怎么就攤上這事指巡。” “怎么了隶垮?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵藻雪,是天一觀的道長。 經(jīng)常有香客問我狸吞,道長勉耀,這世上最難降的妖魔是什么指煎? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮便斥,結(jié)果婚禮上至壤,老公的妹妹穿的比我還像新娘。我一直安慰自己枢纠,他們只是感情好像街,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晋渺,像睡著了一般镰绎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上木西,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天跟狱,我揣著相機(jī)與錄音,去河邊找鬼户魏。 笑死驶臊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叼丑。 我是一名探鬼主播关翎,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸠信!你這毒婦竟也來了纵寝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤星立,失蹤者是張志新(化名)和其女友劉穎爽茴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绰垂,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡室奏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了劲装。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胧沫。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖占业,靈堂內(nèi)的尸體忽然破棺而出绒怨,到底是詐尸還是另有隱情,我是刑警寧澤谦疾,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布南蹂,位于F島的核電站,受9級特大地震影響念恍,放射性物質(zhì)發(fā)生泄漏六剥。R本人自食惡果不足惜晚顷,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仗考。 院中可真熱鬧音同,春花似錦、人聲如沸秃嗜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锅锨。三九已至叽赊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間必搞,已是汗流浹背必指。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留恕洲,地道東北人塔橡。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像霜第,于是被迫代替她去往敵國和親葛家。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 1.App結(jié)構(gòu)和導(dǎo)航 Scaffold:Material Design布局結(jié)構(gòu)的基本實現(xiàn)泌类。此類提供了用于顯示dra...
    慕容小偉閱讀 3,710評論 0 3
  • 自己總結(jié)的Android開源項目及庫癞谒。 github排名https://github.com/trending,g...
    passiontim閱讀 2,538評論 1 26
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,401評論 0 17
  • 《Hidden figures》是部基于真實故事改編的勵志電影刃榨,描述了美國太空總署的黑人女性工作者在種族歧視的環(huán)境...
    海若音閱讀 797評論 0 7
  • 為了寫今天股票營的畢業(yè)感言弹砚,我特意去翻了一下微信支付憑證,10月10號00:32枢希!是的桌吃,我與長投的緣分還不足兩月!...
    沉小豬閱讀 1,378評論 4 73