01 Widget - 布局 Widget 概述

[toc]

Widget

在 Flutter 中 Everything's a Widget贱枣。

啥都別說(shuō)先莽一遍,在Flutter中構(gòu)建布局

可視化調(diào)試

Flutter 開(kāi)發(fā)中沒(méi)有實(shí)時(shí)預(yù)覽卒落,剛上手編寫(xiě) UI 界面時(shí)對(duì)組件的大小或位置不好把握。這個(gè)時(shí)候開(kāi)啟可視化調(diào)試為組件加上標(biāo)注只壳,可以更好的學(xué)習(xí)和[圖片上傳失敗...(image-41ff07-1564558939474)][圖片上傳失敗...(image-3fab06-1564558949839)]

理解組件的使用。

在 main() 方法中加入 debugPaintSizeEnabled = true; 并導(dǎo)入 rendering.dart 然后啟動(dòng)程序吼句。

所有的盒子都會(huì)得到一個(gè)明亮的深青色邊框命辖,padding(來(lái)自widget如Padding)顯示為淺藍(lán)色分蓖,子widget周?chē)幸粋€(gè)深藍(lán)色框么鹤, 對(duì)齊方式(來(lái)自widget如Center和Align)顯示為黃色箭頭. 空白(如沒(méi)有任何子節(jié)點(diǎn)的Container)以灰色顯示

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() {
  debugPaintSizeEnabled = true;
  runApp(MyApp());
}

其他參數(shù):

  • debugPaintBaselinesEnabled:對(duì)于具有基線的對(duì)象蒸甜,文字基線以綠色顯示,表意(ideographic)基線以橙色顯示
  • debugPaintPointersEnabled:該標(biāo)志打開(kāi)一個(gè)特殊模式辉巡,任何正在點(diǎn)擊的對(duì)象都會(huì)以深青色突出顯示郊楣。 這可以幫助您確定某個(gè)對(duì)象是否以某種不正確地方式進(jìn)行hit測(cè)試(Flutter檢測(cè)點(diǎn)擊的位置是否有能響應(yīng)用戶(hù)操作的widget),例如净蚤,如果它實(shí)際上超出了其父項(xiàng)的范圍输硝,首先不會(huì)考慮通過(guò)hit測(cè)試
  • debugPaintLayerBordersEnabled:該標(biāo)志用橙色或輪廓線標(biāo)出每個(gè)層的邊界
  • debugRepaintRainbowEnabled: 只要合成圖層重繪時(shí)点把,這會(huì)使該層被一組旋轉(zhuǎn)色所覆蓋

參考 https://flutterchina.club/debugging/ 調(diào)試應(yīng)用

布局 Widget

布局 Widget 就是 Flutter 中的容器,類(lèi)似 Android 中的 layout(ViewGroup)郎逃。 Flutter 中布局 Widget 可以分為三類(lèi):

  • 擁有單個(gè)子元素的布局 widget

  • 擁有多個(gè)子元素的布局 widget

  • Layout helpers

擁有單個(gè)子元素的布局 widget

官方文檔中擁有單個(gè)子元素的布局 widget 如下表。

Widget 作用
Container 一個(gè)擁有繪制衣厘、定位压恒、調(diào)整大小的 widget
Padding 會(huì)給其子 widget 添加指定的填充
Center 將其子 widget 居中顯示在自身內(nèi)部的 widget
Align 它可以將其子 widget 對(duì)齊型宙,并可以根據(jù)子 widget 的大小自動(dòng)調(diào)整大小
FittedBox 按自己的大小調(diào)整其子 widget 的大小和位置
AspectRatio 試圖將子 widget 的大小指定為某個(gè)特定的長(zhǎng)寬比
ConstrainedBox 對(duì)其子項(xiàng)施加附加約束的 widget
Baseline 根據(jù)子項(xiàng)的基線對(duì)它們的位置進(jìn)行定位的 widget
FractionallySizedBox 把它的子項(xiàng)放在可用空間的一小部分
IntrinsicHeight 將它的子 widget 的高度調(diào)整其本身實(shí)際的高度
IntrinsicWidth 它的子 widget 的寬度調(diào)整其本身實(shí)際的寬度
LimitedBox 當(dāng)其自身不受約束時(shí)才限制其大小的盒子
Offstage 可以控制其子 widget 的顯示和隱藏
OverflowBox 對(duì)其子項(xiàng)施加不同約束的 widget,它可能允許子項(xiàng)溢出父級(jí)
SizedBox 一個(gè)特定大小的盒子搁嗓。這個(gè) widget 強(qiáng)制它的孩子有一個(gè)特定的寬度和高度箱靴。如果寬度或高度為NULL衡怀,則此 widget 將調(diào)整自身大小以匹配該維度中的孩子的大小
SizedOverflowBox 一個(gè)特定大小的 widget,但是會(huì)將它的原始約束傳遞給它的孩子荐类,它可能會(huì)溢出
Transform 在繪制子 widget 之前應(yīng)用轉(zhuǎn)換的 widget
CustomSingleChildLayout 一個(gè)自定義的擁有單個(gè)子 widget 的布局 widget

擁有多個(gè)子元素的布局 widget

Widget 作用
Row 在水平方向上排列子widget的列表
Column 在垂直方向上排列子widget的列表
Stack 可以允許其子widget簡(jiǎn)單的堆疊在一起
IndexedStack 從一個(gè)子widget列表中顯示單個(gè)孩子的Stack
Flow 一個(gè)實(shí)現(xiàn)流式布局算法的widget
Table 為其子widget使用表格布局算法的widget
Wrap 可以在水平或垂直方向多行顯示其子widget
ListBody 一個(gè)widget玉罐,它沿著一個(gè)給定的軸厌小,順序排列它的子元素
ListView 可滾動(dòng)的列表控件璧亚。ListView是最常用的滾動(dòng)widget癣蟋,它在滾動(dòng)方向上一個(gè)接一個(gè)地顯示它的孩子疯搅。在縱軸上幔欧,孩子們被要求填充ListView
CustomMultiChildLayout 使用一個(gè)委托來(lái)對(duì)多個(gè)孩子進(jìn)行設(shè)置大小和定位的小部件

Layout helpers

LayoutBuilder 構(gòu)建一個(gè)可以依賴(lài)父窗口大小的widget樹(shù)

參考 https://flutterchina.club/widgets/layout/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浴井,隨后出現(xiàn)的幾起案子磺浙,更是在濱河造成了極大的恐慌撕氧,老刑警劉巖呵曹,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奄喂,死亡現(xiàn)場(chǎng)離奇詭異跨新,居然都是意外死亡域帐,警方通過(guò)查閱死者的電腦和手機(jī)肖揣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)羊异,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)野舶,“玉大人平道,你說(shuō)我怎么就攤上這事一屋〖侥” “怎么了楚堤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵身冬,是天一觀的道長(zhǎng)酥筝。 經(jīng)常有香客問(wèn)我掸掏,道長(zhǎng)丧凤,這世上最難降的妖魔是什么愿待? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任要出,我火速辦了婚禮患蹂,結(jié)果婚禮上况脆,老公的妹妹穿的比我還像新娘格了。我一直安慰自己盛末,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著嚎京,像睡著了一般鞍帝。 火紅的嫁衣襯著肌膚如雪摄凡。 梳的紋絲不亂的頭發(fā)上亲澡,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天捎琐,我揣著相機(jī)與錄音瑞凑,去河邊找鬼籽御。 笑死铃将,一個(gè)胖子當(dāng)著我的面吹牛劲阎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锡垄,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疾渴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼程奠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起距境,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霹粥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年茴厉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矾缓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜕依。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翠肘,死狀恐怖被丧,靈堂內(nèi)的尸體忽然破棺而出柿究,到底是詐尸還是另有隱情蝇摸,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布离唐,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吗冤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侄旬。 院中可真熱鬧肺蔚,春花似錦、人聲如沸儡羔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至段只,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鉴扫,已是汗流浹背赞枕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坪创,地道東北人炕婶。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像莱预,于是被迫代替她去往敵國(guó)和親柠掂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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

  • 目錄 一依沮、Flutter 為何使用Dart開(kāi)發(fā)語(yǔ)言二涯贞、Flutter的UI系統(tǒng)1.特點(diǎn)2.架構(gòu)簡(jiǎn)介2.1 Flut...
    十拿九穩(wěn)啦閱讀 3,662評(píng)論 3 28
  • 原文在此,此處只為學(xué)習(xí) Widget與ElementWidget主要接口Stateless WidgetState...
    lltree閱讀 4,513評(píng)論 0 1
  • 轉(zhuǎn)自 Q吹個(gè)大氣球Q 本文主要介紹了Flutter布局相關(guān)的內(nèi)容危喉,對(duì)相關(guān)知識(shí)點(diǎn)進(jìn)行了梳理宋渔,并從實(shí)際例子觸發(fā),進(jìn)一步...
    chilim閱讀 1,930評(píng)論 0 17
  • Tulky閱讀 325評(píng)論 0 0
  • 人有時(shí)候真的需要來(lái)一場(chǎng)說(shuō)走就走的旅行辜限,不過(guò)這旅行還真是有點(diǎn)讓人緊張啊
    FineYoga小白閱讀 159評(píng)論 0 0