Flutter學(xué)習(xí)之六 Row和Column

故不登高山硫麻,不知天之高也瞎疼;不臨深溪水援,不知地之厚也;

???? Flutter學(xué)習(xí)之五 文件命名規(guī)范及代碼格式化

前言

作為6年的OC coder來說宴杀,開始在寫Flutter布局的時(shí)候還是有點(diǎn)不適應(yīng)癣朗。就拿下面簡單的頁面來說:

圖1

如果用原生開發(fā),一般來說三個(gè)控件就OK了旺罢,左邊2個(gè)UILabel旷余,右邊是個(gè)UIButton,然后設(shè)置約束就成了主经。
但是這在Flutter里面就不能這么整了荣暮,Flutter里面要先確定布局方向,是橫向的還是縱向的罩驻。對于上面的UI穗酥,在Flutter里面就是最外層是左右布局,要選用Row惠遏,左邊2個(gè)文本是上下布局要選用Column砾跃,最終的結(jié)果是,一個(gè)Row里面有2個(gè)子Widget节吮,一是個(gè)Column一個(gè)是Button抽高,其中Column里面包含2個(gè)Text

正文

FlutterRowColumn是線性布局組件透绩,所謂線性布局翘骂,即指沿水平或垂直方向排列子組件。RowColumn都繼承自Flex帚豪,彈性布局以后再說碳竟。

主軸和縱軸

在介紹RowColumn之前,要先提一下主軸和縱軸狸臣。如果布局是沿水平方向莹桅,那么主軸就是指水平方向,而縱軸即垂直方向烛亦;如果布局沿垂直方向诈泼,那么主軸就是指垂直方向,而縱軸就是水平方向煤禽。在線性布局中铐达,有兩個(gè)定義對齊方式的枚舉類MainAxisAlignmentCrossAxisAlignment,分別代表主軸對齊和縱軸對齊檬果。

Row(水平方向排列)

Row的定義如下:

Row({
    Key? key,
    MainAxisAlignment mainAxisAlignment = MainAxisAlignment.start,
    MainAxisSize mainAxisSize = MainAxisSize.max,
    CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center,
    TextDirection? textDirection,
    VerticalDirection verticalDirection = VerticalDirection.down,
    TextBaseline? textBaseline, // NO DEFAULT: we don't know what the text's baseline should be
    List<Widget> children = const <Widget>[],
  }) 
  • mainAxisSize:表示在水平方向占用的空間娶桦,默認(rèn)是MainAxisSize.max,表示盡可能的占用水平方向的空間,即占用水平方向的最大寬度衷畦,和子組件寬度無關(guān)。MainAxisSize.min表示盡可能的少占用空間知牌,自身寬度即子組件最大寬祈争。
  • mainAxisAlignment:水平方向?qū)R方式,如果mainAxisSize的值為MainAxisSize.min角寸,那么此屬性沒有意義菩混,因?yàn)樽咏M件的寬度等于Row的寬度。只有mainAxisSize的值為MainAxisSize.max時(shí)扁藕,MainAxisAlignment.start(center沮峡、end)表示左(中、右)對齊亿柑。
  • textDirection:表示文字初始方向邢疙,漢字是從左往右的,阿拉伯是從右往左望薄。設(shè)置這個(gè)會影響主軸對齊方式疟游,比較好理解。
  • verticalDirection:表示Row縱軸(垂直)的對齊方向痕支,默認(rèn)是VerticalDirection.down颁虐,表示從上到下。
  • crossAxisAlignment:表示子組件在縱軸方向的對齊方式卧须,Row的高度等于子組件中最高的子元素高度另绩,它的取值和MainAxisAlignment一樣(包含start、end花嘶、 center三個(gè)值)笋籽,不同的是crossAxisAlignment的參考系是verticalDirection,即verticalDirection值為VerticalDirection.down時(shí)crossAxisAlignment.start指頂部對齊察绷,verticalDirection值為VerticalDirection.up時(shí)干签,crossAxisAlignment.start指底部對齊;而crossAxisAlignment.endcrossAxisAlignment.start正好相反拆撼;
  • children:子組件數(shù)組容劳。

舉個(gè)栗子??

如果理解上面屬性的介紹,看下面的代碼闸度,估計(jì)腦海里就有了大致的UI

Column(
      children: <Widget>[
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: const <Widget>[
            Text(" see you again "),
            Text(" I am Twist "),
          ],
        ),
        Row(
          mainAxisSize: MainAxisSize.min,
          mainAxisAlignment: MainAxisAlignment.center,
          children: const <Widget>[
            Text(" see you again "),
            Text(" I am Twist "),
          ],
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.start,
          textDirection: TextDirection.rtl,
          children: const <Widget>[
            Text(" see you again "),
            Text(" I am Twist "),
          ],
        ),
        Row(
          crossAxisAlignment: CrossAxisAlignment.end,
          verticalDirection: VerticalDirection.up,
          children: const <Widget>[
            Text(
              " see you again ",
              style: TextStyle(fontSize: 30.0),
            ),
            Text(" I am Twist "),
          ],
        ),
      ],
    );

UI顯示如下:


2.png

Column(垂直方向排列)

Column是在垂直方向排列其子組件竭贩。參數(shù)和Row一樣,不同的是布局方向?yàn)榇怪陛航鬏S縱軸正好相反留量,讀者可類比Row來理解。

舉個(gè)栗子??

class ColumnPage extends StatelessWidget {
  const ColumnPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Column'),
      ),
      body: Container(
        color: Colors.red,
        child: Column(
          // 主軸(垂直方向) ,start系統(tǒng)默認(rèn)值
          mainAxisAlignment: MainAxisAlignment.start,
          // 與主軸垂直(水平方向)楼熄,center系統(tǒng)默認(rèn)值
          crossAxisAlignment: CrossAxisAlignment.center,
          children: const <Widget>[
            Text("see"),
            Text("you"),
            Text("again"),
          ],
        ),
      ),
    );
  }
}

為了方便看效果忆绰,我加了一個(gè)背景顏色, 效果圖如圖3:


3.png

Column下默認(rèn)主軸是最大值可岂,即屏高错敢,寬度沒有設(shè)置,默認(rèn)是子組件(again)最大寬缕粹。

總結(jié)

整體來說還是很好理解的稚茅,看到一個(gè)頁面就先橫縱咔咔一分,然后開始橫套縱平斩、縱套橫亚享,這樣一個(gè)頁面就出來了。

后記

在寫UI的時(shí)候绘面,有的時(shí)候需要設(shè)置一個(gè)簡單的間距欺税,或者是某個(gè)組件占用剩下的全部空間,請看下篇文章Expanded飒货。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末魄衅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子塘辅,更是在濱河造成了極大的恐慌晃虫,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扣墩,死亡現(xiàn)場離奇詭異哲银,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)呻惕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門荆责,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亚脆,你說我怎么就攤上這事做院。” “怎么了濒持?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵键耕,是天一觀的道長。 經(jīng)常有香客問我柑营,道長屈雄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任官套,我火速辦了婚禮酒奶,結(jié)果婚禮上蚁孔,老公的妹妹穿的比我還像新娘。我一直安慰自己惋嚎,他們只是感情好杠氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘸彤,像睡著了一般修然。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上质况,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音玻靡,去河邊找鬼结榄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛囤捻,可吹牛的內(nèi)容都是我干的臼朗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蝎土,長吁一口氣:“原來是場噩夢啊……” “哼视哑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起誊涯,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挡毅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后暴构,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跪呈,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年取逾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耗绿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砾隅,死狀恐怖误阻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晴埂,我是刑警寧澤究反,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站邑时,受9級特大地震影響奴紧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晶丘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一黍氮、第九天 我趴在偏房一處隱蔽的房頂上張望唐含。 院中可真熱鬧,春花似錦沫浆、人聲如沸捷枯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淮捆。三九已至,卻和暖如春本股,著一層夾襖步出監(jiān)牢的瞬間攀痊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工拄显, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苟径,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓躬审,卻偏偏與公主長得像棘街,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子承边,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

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