主要屬性

創(chuàng)新新互聯(lián),憑借10多年的成都做網(wǎng)站、成都網(wǎng)站設(shè)計經(jīng)驗,本著真心·誠心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計網(wǎng)站有近千家案例。做網(wǎng)站建設(shè),選成都創(chuàng)新互聯(lián)。
//創(chuàng)建一個帶 title 的 item
//通過傳入 length 多少個來創(chuàng)建多少個 item
最近在開發(fā)中想實現(xiàn)一個AppBar下面有選項卡,來回切換的頁面功能,百度了很多沒有和自己需求符合的,網(wǎng)上大都是返回的Scaffold,使用系統(tǒng)的Appbar,添加至.bottom中,但是現(xiàn)在項目中用的是自定義的Appbar,不想破壞系統(tǒng)的統(tǒng)一封裝。
所以在body 中實現(xiàn)TabBar 和 TabBarView,開始使用Column一直不行,只能顯示一個,但是在body里面同時放置 TabBar 和 TabBarView需要注意
TabBarView 的父 Widget 必須知道寬高才能布局,否則,會報錯:BoxConstraints forces an infinite height.
使用 Column + Expanded 即可:
注:還有設(shè)置tabbar的tab背景顏色,tabbar中的tab的背景顏色取的實際是AppBar的主題色,所以我們將tabbar放在Material中來重置了主題色,變成我們想要的背景色.
buildTabBar為創(chuàng)建TabBar的方法:
buildBodyView創(chuàng)建視圖方法:
新建一個Flutter工程,android模塊。
1,只有一個Activity組件,它是Dart層繪制Widget的容器。
2,Application配置FlutterApplication。
應(yīng)用Application配置io.flutter.app.FlutterApplication類,App首次啟動時,初始化。
調(diào)用FlutterMain.startInitialization()方法。
initConfig方法,從AndroidManfest.xml配置的applicaion節(jié)點(diǎn)獲取meta-data數(shù)據(jù),初始化以下默認(rèn)值。
這些值都是使用中用到的name,例如,抽取apk中asset資源時,flutter_assets打包目錄,打包產(chǎn)物data名稱。
initResources方法, 初始化資源。
在Flutter打包apk的asset目錄下,包括fluttter_asset目錄/資源項,將資源從apk中抽取,保存在 Context.getDir("flutter", 0) 目錄下。
/data/user/0/包名/app_flutter目錄。
在目錄中創(chuàng)建一個時間戳文件,根據(jù)apk版本和包信息記錄的lastUpdateTime更新時間,第二次啟動時,若apk未更新,不需要再次抽取。
加載so庫,libflutter.so,System.loadLibrary()。
主頁面繼承FlutterActivity,配置啟動模式singleTop。
FlutterActivity類在io.flutter.app包, (區(qū)別io.flutter.embedding.android包), 組件生命周期委托給FlutterActivityDelegate類。
組件啟動,onCreate方法。
FlutterMain.ensureInitializationComplete方法,確保資源成功抽取完成,創(chuàng)建FlutterView視圖(io.flutter.view),繼承SurfaceView類,setContentView方法,設(shè)置組件主布局即FlutterView視圖。
最后,根據(jù)Bundle路徑,runBundle()加載運(yùn)行,
調(diào)用FlutterView的runFromBundle方法,入口點(diǎn)在dart的main方法,
通過FlutterNativeView,調(diào)用FlutterJNI的native方法。
nativeRunBundleAndSnapshotFromLibrary方法。
任重而道遠(yuǎn)
對于初學(xué)flutter的朋友來說,要知道,flutter的UI萬物皆Widget。
flutter所寫的頁面的結(jié)構(gòu)可以被看成套娃,一層套一層,一層套一層,一層套一層。。。。。。
Flutter Widget采用現(xiàn)代響應(yīng)式框架構(gòu)建,這是從 React 中獲得的靈感,中心思想是用widget構(gòu)建你的UI。 Widget描述了他們的視圖在給定其當(dāng)前配置和狀態(tài)時應(yīng)該看起來像什么。當(dāng)widget的狀態(tài)發(fā)生變化時,widget會重新構(gòu)建UI,F(xiàn)lutter會對比前后變化的不同, 以確定底層渲染樹從一個狀態(tài)轉(zhuǎn)換到下一個狀態(tài)所需的最小更改。
Text : 該 widget 可讓創(chuàng)建一個帶格式的文本。
Row 、 Column : 這些具有彈性空間的布局類Widget可讓您在水平( Row )和垂直( Column )方向上創(chuàng)建靈活的布局。
Stack :取代線性布局 (和Android中的LinearLayout相似),Stack允許子 widget 堆疊, 你可以使用 Positioned 來定位他們相對于 Stack 的上下左右四條邊的位置。
Container : Container 可讓您創(chuàng)建矩形視覺元素。 您可以為 Container 裝飾一個 BoxDecoration , 如 background、一個邊框、或者一個陰影。 Container 也可以具有邊距(margins)、填充(padding)和應(yīng)用于其大小的約束(constraints)。另外, Container 可以使用矩陣在三維空間中對其進(jìn)行變換。
具體的演示見我另外的博客
有一部分Widget都有一個 child 屬性,用于容納唯一的子Widget。
例如:Container、Center、Padding、Align等Widget。
還有一部分Widget允許存在多個子Widget,用 children 作為屬性。
例如:Row、Column、Stack等Widget。
在StatefulWidget調(diào)用createState之后,框架將新的狀態(tài)插入樹種,然后調(diào)用狀態(tài)對象的initState。子類化State可以重寫initState,以完成僅需要一次執(zhí)行的工作。當(dāng)然在initState的實現(xiàn)中需要調(diào)用super.initState
當(dāng)一個狀態(tài)對象不再需要時,框架調(diào)用狀態(tài)對象的dispose。也可以通過覆蓋dispose方法來執(zhí)行清理工作。
OVER~
文章名稱:flutter視圖的簡單介紹
分享路徑:http://chinadenli.net/article17/dsgohgj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、品牌網(wǎng)站制作、ChatGPT、企業(yè)建站、用戶體驗、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)