水平垂直居中布局。類似Container設(shè)置alignment
創(chuàng)新互聯(lián)建站專注于網(wǎng)站設(shè)計、做網(wǎng)站、網(wǎng)頁設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
固定寬高布局,類似Container設(shè)置了寬高
寬高比布局。
四、FractionallySizedBox
百分比布局。
這里注意百分比布局外層一定是一個有大小的容器(如SizedBox、Container),否則會報錯。
卡片布局。
本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2
我是小栗子,初學(xué)Flutter ,文章會根據(jù)學(xué)習(xí)進度不定時更新,請多多指教~~
Stack 是可以將視圖根據(jù)children中子組件的順序進行疊加的組件,根據(jù)子組件是否被Positioned包裹判斷布局的方式
Stack 的fit 屬性用來控制Stack如何將自己的父級組件的尺寸約束傳達給無位置組件,通過fit屬性約束Stack中無位置組件的尺寸,默認(rèn)值是 StackFie.loose. 如:Stack的父級組件要求Stack的尺寸是 200x200 ~ 500x500.在默認(rèn)的StackFit.loose(寬松狀態(tài))下,Stack 可以運行其children在不違反父級約束的前提下,自由選擇尺寸,即可在0x0~500x500的范圍內(nèi)任意選擇。相反如何傳入的fit是StackFit.expand(擴張狀態(tài))下,則會要求所有無位置children必須占滿父級約束的最大空間,即尺寸必須為500x500,最后當(dāng)傳入的StackFit.passthrough(穿透狀態(tài))時,Stack會將自己父級組件的尺寸約束直接傳遞給子組件,即保留原有的200x200 ~ 500x500的約束。
StackFie.loose 和StackFit.passthrough的效果
StackFit.expand的效果
Flutter 仿抖音效果 (一) 全屏點愛星
Flutter 仿抖音效果 (二) 界面布局
[Flutter 仿抖音效果 (三) 視頻播放列表] ( )
項目地址: 持續(xù)效果更新
1.基本的布局是簡單的,外層通過Stack作為根
2.左邊點贊的控件組通過Align進行統(tǒng)一布局
3.頂部控件組通過Positioned進行布局,設(shè)置頂部距離,其實也可以用align,我們多使用幾種來習(xí)慣flutter的布局
4.底部同樣使用Positioned,設(shè)置底部距離
5.子頁面的左右滑動使用PageView,一開始我們要從推薦開始左滑到關(guān)注,可以使用reverse屬性,不需要更多額外的操作
1.pageController監(jiān)聽
刷新頂部的下劃線時,我們一樣使用StreamController刷新,這樣效率比setstate高很多
2.歌曲名走馬燈效果
這個效果看起來挺麻煩的其實實現(xiàn)起來超級的簡單用最普通的ListView就能快速的實現(xiàn)
首頁listview里面套入的是最簡單的container+text
listview添加一個ScrollController做為滑動的控制
使用一個定時器,把listview滑到最大的位置之后,在滑回去
先通過scroController.position.maxScrollExtent獲取最大位置,
然后通過scroController.animateTo進行滑動,因為我設(shè)置一次循環(huán)的時間是3000毫秒,所以滑過去和滑回來的時間各占一般 new Duration(milliseconds: (time * 0.5).toInt()),還有就是歌名沒有大于最大寬度時候其實我們不需要進行滑動,所以判斷maxScrollExtent是否大于0來確定是否進行滑動動畫
相對于iOS開發(fā),F(xiàn)lutter的布局更具有靈活性,每個頁面設(shè)計都不一樣,相同頁面可選擇的布局方式也不一樣,如果單純的說應(yīng)該如何去布局,我覺得不現(xiàn)實,大家可以參考下 Flutter官方的布局教程 。接下來,筆者,通過項目中的一個頁面,來一步一步的拆解布局的流程。整個過程,基本上按照拆解、組件封裝、具體布局這三步來的。
根據(jù)設(shè)計圖,可以看出整體可以分成兩部分,上面一部分是系統(tǒng)介紹模塊,下面一部分是真正的登錄內(nèi)容,因為涉及到疊加,因此考慮用Stack;
系統(tǒng)介紹模塊部分:整體也是涉及到疊加,考慮用Stack,分為四部分。最底部漸變色背景用一個contanier,無須指定位置,全視圖擴展;載放logo圖標(biāo)在上一層,用Image。最后兩個Text同級放在最上層。Image,Text各用Positioned包裹去指定位置。
登錄內(nèi)容模塊是最外層是一個Contanier容器,去控制背景色和圓角。然后是一個Column元素,逐行排列。
第一行為Image,
第二行為Text,
第三行可以看成一個小Column,分兩塊進行布局
第四行可以看成一個小Column,分兩塊進行布局
第五行可以看作一個TextButton,
第六行可以看作一個Row,分三塊進行布局
通過上面這樣一步一步的分析后,基本上對大致的布局有了一個了解,最外層的控件大致選對(只要能實現(xiàn)的話,就是復(fù)雜度以及效率的問題),然后一步一步的拆解每一行的元素,如果有重復(fù)的或者覺得可以封裝出來的部分,則進行下一步。
每一行的拆解,大致也是按照這個思路來進行,因此筆者在這里就不做講解了。
在做到第三第四行的時候,發(fā)現(xiàn)這兩個很相似,而且設(shè)計到一些交互邏輯,筆者就想對第三第四行的這種展示進行封裝,覺得今后的布局可能會用到,因此在這一步,可以先把這一塊兒抽離出一個控件。利用TextField來實現(xiàn)這種輸入操作,具體的實現(xiàn)筆者不再詳細(xì)的描述了。
經(jīng)過這一步,整體的規(guī)劃設(shè)計圖已經(jīng)有了,各個組件也都有了,接下來的工作就是組裝了。
具體布局設(shè)計到一些細(xì)節(jié)的地方,例如整體Column的居中對齊(crossAxisAlignment)、間隔(Padding或Container包裹,筆者更喜歡用SizedBox占位)、居左居右居中(Align)、點擊事件(GestureDetector)以及圓角(BorderRadius)等一些特殊情況。
像第六行row是放在底部的,就可以在第六行前面增加一個Spacer()去填充空白區(qū)域。
對文字顏色大小等,可以用TextStyle直接設(shè)置。
對于輸入框的刪除按鈕,可以用Offstage這種Flutter特有的控制顯示隱藏的控件。
Container的組成如下:
- width? 和? height :寬和高。
- color :背景色,值為一個 Color 對象,不能與 decoration 屬性同時設(shè)置。
-? margin :外邊距,值為一個 EdgeInsets 對象。EdgeInsets 對象即可調(diào)用EdgeInsets.all() 方法統(tǒng)一設(shè)置左上右下四條邊的邊距,也可以調(diào)用 EdgeInsets.fromLTRB() 分別設(shè)置左上右下四條邊的邊距。
-? padding :內(nèi)間距,值同 margin。
-? alignment :元素對齊方式
-? decoration :裝飾、背景顏色、邊框、背景圖片、等,不能與 color 屬性同時設(shè)置
-? child :子組件
-參數(shù) alignment:
topCenter :頂部居中對齊???? topLeft :頂部左對齊????? topRight :頂部右對齊 ???? center :水平垂直居中對齊 ???? centerLeft :垂直居中水平居左對齊 ???? centerRight :垂直居中水平居右對齊 ???? bottomCenter 底部居中對齊???? bottomLeft :底部居左對齊???? bottomRight :底部居右對齊
-參數(shù)?decoration :
Container參數(shù)的使用如下:
Stack 組件是一種層疊式布局,即組件覆蓋另一個組件,覆蓋的順序取決于在children中放置的順序,使用場景比如在圖片上加上一些文字描述,即將文本W(wǎng)idget覆蓋在圖片組件,詳見下面的小例。
當(dāng)前標(biāo)題:flutter布局介紹,Flutter架構(gòu)
文章轉(zhuǎn)載:http://vcdvsql.cn/article2/dsdihoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、微信小程序、網(wǎng)站收錄、關(guān)鍵詞優(yōu)化、標(biāo)簽優(yōu)化、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)