重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
相對于iOS開發,Flutter的布局更具有靈活性,每個頁面設計都不一樣,相同頁面可選擇的布局方式也不一樣,如果單純的說應該如何去布局,我覺得不現實,大家可以參考下 Flutter官方的布局教程 。接下來,筆者,通過項目中的一個頁面,來一步一步的拆解布局的流程。整個過程,基本上按照拆解、組件封裝、具體布局這三步來的。
在謝通門等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都網站制作、網站建設 網站設計制作按需定制設計,公司網站建設,企業網站建設,品牌網站制作,成都全網營銷推廣,成都外貿網站建設,謝通門網站建設費用合理。
根據設計圖,可以看出整體可以分成兩部分,上面一部分是系統介紹模塊,下面一部分是真正的登錄內容,因為涉及到疊加,因此考慮用Stack;
系統介紹模塊部分:整體也是涉及到疊加,考慮用Stack,分為四部分。最底部漸變色背景用一個contanier,無須指定位置,全視圖擴展;載放logo圖標在上一層,用Image。最后兩個Text同級放在最上層。Image,Text各用Positioned包裹去指定位置。
登錄內容模塊是最外層是一個Contanier容器,去控制背景色和圓角。然后是一個Column元素,逐行排列。
第一行為Image,
第二行為Text,
第三行可以看成一個小Column,分兩塊進行布局
第四行可以看成一個小Column,分兩塊進行布局
第五行可以看作一個TextButton,
第六行可以看作一個Row,分三塊進行布局
通過上面這樣一步一步的分析后,基本上對大致的布局有了一個了解,最外層的控件大致選對(只要能實現的話,就是復雜度以及效率的問題),然后一步一步的拆解每一行的元素,如果有重復的或者覺得可以封裝出來的部分,則進行下一步。
每一行的拆解,大致也是按照這個思路來進行,因此筆者在這里就不做講解了。
在做到第三第四行的時候,發現這兩個很相似,而且設計到一些交互邏輯,筆者就想對第三第四行的這種展示進行封裝,覺得今后的布局可能會用到,因此在這一步,可以先把這一塊兒抽離出一個控件。利用TextField來實現這種輸入操作,具體的實現筆者不再詳細的描述了。
經過這一步,整體的規劃設計圖已經有了,各個組件也都有了,接下來的工作就是組裝了。
具體布局設計到一些細節的地方,例如整體Column的居中對齊(crossAxisAlignment)、間隔(Padding或Container包裹,筆者更喜歡用SizedBox占位)、居左居右居中(Align)、點擊事件(GestureDetector)以及圓角(BorderRadius)等一些特殊情況。
像第六行row是放在底部的,就可以在第六行前面增加一個Spacer()去填充空白區域。
對文字顏色大小等,可以用TextStyle直接設置。
對于輸入框的刪除按鈕,可以用Offstage這種Flutter特有的控制顯示隱藏的控件。
Flutter 仿抖音效果 (一) 全屏點愛星
Flutter 仿抖音效果 (二) 界面布局
[Flutter 仿抖音效果 (三) 視頻播放列表] ( )
項目地址: 持續效果更新
1.基本的布局是簡單的,外層通過Stack作為根
2.左邊點贊的控件組通過Align進行統一布局
3.頂部控件組通過Positioned進行布局,設置頂部距離,其實也可以用align,我們多使用幾種來習慣flutter的布局
4.底部同樣使用Positioned,設置底部距離
5.子頁面的左右滑動使用PageView,一開始我們要從推薦開始左滑到關注,可以使用reverse屬性,不需要更多額外的操作
1.pageController監聽
刷新頂部的下劃線時,我們一樣使用StreamController刷新,這樣效率比setstate高很多
2.歌曲名走馬燈效果
這個效果看起來挺麻煩的其實實現起來超級的簡單用最普通的ListView就能快速的實現
首頁listview里面套入的是最簡單的container+text
listview添加一個ScrollController做為滑動的控制
使用一個定時器,把listview滑到最大的位置之后,在滑回去
先通過scroController.position.maxScrollExtent獲取最大位置,
然后通過scroController.animateTo進行滑動,因為我設置一次循環的時間是3000毫秒,所以滑過去和滑回來的時間各占一般 new Duration(milliseconds: (time * 0.5).toInt()),還有就是歌名沒有大于最大寬度時候其實我們不需要進行滑動,所以判斷maxScrollExtent是否大于0來確定是否進行滑動動畫
流式布局(Liquid)的特點(也叫"Fluid") 是頁面元素的寬度按照屏幕分辨率進行適配調整,但整體布局不變。柵欄系統(網格系統),用戶標簽等。在Flutter中主要有Wrap和Flow兩種Widget實現。
在介紹Row和Colum時,如果子widget超出屏幕范圍,則會報溢出錯誤,在Flutter中通過Wrap和Flow來支持流式布局,溢出部分則會自動折行。
上述有很多屬性和Row的相同,其意義其實也是相同的,這里我就不一一介紹了,主要介紹下不同的屬性:
我們一般很少會使用Flow,因為其過于復雜,需要自己實現子widget的位置轉換,在很多場景下首先要考慮的是Wrap是否滿足需求。Flow主要用于一些需要自定義布局策略或性能要求較高(如動畫中)的場景。Flow有如下優點:
我們對六個色塊進行自定義流式布局:
實現TestFlowDelegate:
可以看到我們主要的任務就是實現paintChildren,它的主要任務是確定每個子widget位置。由于Flow不能自適應子widget的大小,我們通過在getSize返回一個固定大小來指定Flow的大小,實現起來還是比較麻煩的。
水平垂直居中布局。類似Container設置alignment
固定寬高布局,類似Container設置了寬高
寬高比布局。
四、FractionallySizedBox
百分比布局。
這里注意百分比布局外層一定是一個有大小的容器(如SizedBox、Container),否則會報錯。
卡片布局。
本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2
我是小栗子,初學Flutter ,文章會根據學習進度不定時更新,請多多指教~~