淺嘗flutter中的flex布局

假設(shè)你已經(jīng)掌握了flutter的一些基礎(chǔ)知識,比如環(huán)境搭建,簡單的dart語法吻谋,及flutter組件化思想巡社。那么你適合閱讀本篇教程,本教程演示一些flutter中的flex用法的簡單示例.

在不懂height: 170.0,width:100.0如何適配不同分辨率的時候奋构,只能用flex搞事情壳影,所以咱看看flex如何在flutter中搞事情。

先看效果圖:

效果圖

分析一下需求:

分析需求

整個布局最外層是一個Row弥臼,左邊是一個Column里面再嵌套一個Row宴咧,代碼實現(xiàn)如下:

import 'package:flutter/material.dart';
class FluterFlex extends StatelessWidget {
  @override
  Widget  build(BuildContext context){   
    return new Center(
      child: new Row(
        children: <Widget>[
           new Column(
              children: <Widget>[
                new Text(
                  "為什么說Flutter是革命性的1",
                  style: new TextStyle(
                    fontSize: 18.0
                  ),
                ),   
                new Row(
                  children: <Widget>[
                    new Text(
                      '央視網(wǎng)',
                    ), 
                    new Text(
                        '2018-03-11',
                    ), 
                  ],
                ),               
              ],
            ),
            new Image.asset(
              'images/head.jpg',
              height: 100.0,
              fit: BoxFit.cover,
              ),
        ],
      ),    
    );
  }
}

這只是純組件代碼,還沒有添加任何樣式

最外層的Row径缅,有2個子組件,它們主軸為水平方向掺栅,起點為左端,和flex的flex-direction: row同樣效果,子組件的對齊方式為兩端對齊,flex代碼為 justify-content: space-between纳猪。

然后左側(cè)布局為Column氧卧,主軸方向為垂直方向,兩個子組件的布局方式為兩端對齊氏堤,flex代碼為: justify-content:space-between沙绝。

左側(cè)底部同理。在flutter如果實現(xiàn)呢鼠锈,代碼如下:


import 'package:flutter/material.dart';

class FluterFlex extends StatelessWidget {
  @override
  Widget  build(BuildContext context){
    
   return new Center(
    child:new Container(
      height: 120.0,
      padding:new EdgeInsets.only(left:20.0,right:20.0),//給最外層添加padding
      decoration: new BoxDecoration(
        border:new Border.all(//新手建議給每一個組件寫一個border
          color:const Color(0xff6d9eeb),
        )
      ),
      child: new Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,//子組件的排列方式為主軸兩端對齊
        children: <Widget>[
          new Expanded(
            flex:2,//這個item占據(jù)剩余空間的份數(shù)闪檬,因為總數(shù)為3,所以此處占據(jù)2/3
            child: new Column(
              crossAxisAlignment: CrossAxisAlignment.start,//子組件的在交叉軸的對齊方式為起點
              mainAxisAlignment:MainAxisAlignment.spaceBetween ,//子組件在主軸的排列方式為兩端對齊
              children: <Widget>[
                new Container(
                  padding:new EdgeInsets.only(top:15.0),//標題寫一個top-padding
                  decoration: new BoxDecoration(
                    border:new Border.all(
                        color:const Color(0xff6d999b),
                    )
                  ),
                  child:new Text(
                  "為什么說Flutter是革命性的",
                  style: new TextStyle(
                    fontSize: 18.0
                  ),

                  ), 
                ),
                 new Container(
                  padding:const EdgeInsets.only(right:13.0,bottom:15.0),
                  decoration: new BoxDecoration(
                    border:new Border.all(
                        color:const Color(0xff6d999b),
                    )
                  ),
                  child:new Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,//子組件在主軸的排列方式為兩端對齊
                    children: <Widget>[
                      new Text(
                        '央視網(wǎng)',
                      ), 
                       new Text(
                        '2018-03-11',
                      ), 
                    ],
                  )
                 
                ),
                
              ],
            ),
          ),
          new Expanded(
            flex:1,//這個item占據(jù)剩余空間的份數(shù)脚祟,因為總數(shù)為3谬以,所以此處占據(jù)1/3
            child: new Image.asset(//本地圖片加載,需在pubspec.yaml配置
              'images/head.jpg',
              height: 100.0,
              fit: BoxFit.cover,
              ),
          ),
        ],
      ),
    ),
   );
  }
}


效果如圖:

效果圖

在上面代碼中由桌,還添加了一些其他樣式为黎,并且給每一個組件都加了border,這樣便于新手布局行您。我們把多余的代碼刪掉然后稍作改進铭乾,完整代碼如下:


import 'package:flutter/material.dart';

class FluterFlex extends StatelessWidget {
  @override
  Widget  build(BuildContext context){
    
   return new Center(
    child:new Container(
      height: 120.0,
      padding:new EdgeInsets.only(left:20.0,right:20.0),//給最外層添加padding
      decoration: new BoxDecoration(
        border:new Border(
          bottom: new BorderSide(width: 1.0,color:const Color(0xff999999))
          // color:const Color(0xff6d9eeb),
        )
      ),
      child: new Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,//子組件的排列方式為主軸兩端對齊
        children: <Widget>[
          new Expanded(
            flex:2,//這個item占據(jù)剩余空間的份數(shù),因為總數(shù)為3娃循,所以此處占據(jù)2/3
            child: new Column(
              crossAxisAlignment: CrossAxisAlignment.start,//子組件的在交叉軸的對齊方式為起點
              mainAxisAlignment:MainAxisAlignment.spaceBetween ,//子組件的排列方式為主軸兩端對齊
              children: <Widget>[
                new Container(
                  padding:new EdgeInsets.only(top:15.0),//標題寫一個top-padding
                  child:new Text(
                  "為什么說Flutter是革命性的",
                  style: new TextStyle(
                    fontSize: 18.0
                  ),
                  ), 
                ),
                 new Container(
                  padding:const EdgeInsets.only(right:13.0,bottom:15.0),
                  child:new Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,//子組件的排列方式為主軸兩端對齊
                    children: <Widget>[
                      new Text(
                        '央視網(wǎng)',
                      ), 
                       new Text(
                        '2018-03-11',
                      ), 
                    ],
                  )
                 
                ),
                
              ],
            ),
          ),
         
          new Expanded(
            flex:1,//這個item占據(jù)剩余空間的份數(shù)炕檩,因為總數(shù)為3,所以此處占據(jù)1/3
            child: new Image.asset(//本地圖片加載,需在pubspec.yaml配置
              'images/head.jpg',
              height: 100.0,
              fit: BoxFit.cover,
              ),
          ),
        ],
      ),
    ),  
   );
  }
}


代碼都是參考官網(wǎng)英文文檔擼的笛质,但是本人是英語渣泉沾,所以如果有不對的地方,歡迎大家指正妇押!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跷究,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子敲霍,更是在濱河造成了極大的恐慌俊马,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肩杈,死亡現(xiàn)場離奇詭異柴我,居然都是意外死亡,警方通過查閱死者的電腦和手機扩然,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門艘儒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夫偶,你說我怎么就攤上這事彤悔。” “怎么了索守?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抑片。 經(jīng)常有香客問我卵佛,道長,這世上最難降的妖魔是什么敞斋? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任截汪,我火速辦了婚禮,結(jié)果婚禮上植捎,老公的妹妹穿的比我還像新娘衙解。我一直安慰自己,他們只是感情好焰枢,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布蚓峦。 她就那樣靜靜地躺著,像睡著了一般济锄。 火紅的嫁衣襯著肌膚如雪暑椰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天荐绝,我揣著相機與錄音一汽,去河邊找鬼。 笑死低滩,一個胖子當(dāng)著我的面吹牛召夹,可吹牛的內(nèi)容都是我干的岩喷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼监憎,長吁一口氣:“原來是場噩夢啊……” “哼纱意!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起枫虏,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妇穴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后隶债,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腾它,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年死讹,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞒滴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赞警,死狀恐怖妓忍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愧旦,我是刑警寧澤世剖,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站笤虫,受9級特大地震影響旁瘫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琼蚯,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一酬凳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遭庶,春花似錦宁仔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赐俗,卻和暖如春拉队,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阻逮。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工粱快, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓事哭,卻偏偏與公主長得像漫雷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鳍咱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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