1、常用布局的對(duì)比

專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)上饒免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
使用下來其他組件大致還算方便,但是相對(duì)布局而言使用便利程度上Android原生完勝,ConstraintLayout內(nèi)部的所有子View可以設(shè)置互相之間的位置依賴關(guān)系。
而Flutter的Stack組件內(nèi)部的Children只能通過外層包裹 Align后 固定位置,比如 Alignment.topLeft、Alignment.bottomRight 等。遇到復(fù)雜的堆疊布局需要通過外層包裹 Positioned 組件后設(shè)置固定的 top 和 left 距離以達(dá)到效果,內(nèi)部子組件之間無法設(shè)置位置關(guān)聯(lián)關(guān)系。
2、一些常用屬性設(shè)置上的差異:
Margin外邊距
Android:直接在布局文件對(duì)View設(shè)置android:layout_marginStart、android:layout_marginTop
Flutter:需嵌套 Container 組件并在內(nèi)部設(shè)置具體的 margin 值
Padding內(nèi)邊距
Android:TextView、ImageView、各種Layout都可以直接在屬性上設(shè)置android:paddingStart
Flutter:需嵌套 Padding 組件并在內(nèi)部設(shè)置具體的值
組件的可見性
Android:每個(gè)view都可以通過setVisibility來設(shè)置可見、隱藏或者隱藏但占位
Flutter:沒有單獨(dú)設(shè)置組件是否顯示的api,只能通過 bool 值控制是否添加該組件
事件監(jiān)聽
Android:常規(guī)的setOnClickListener和setOnLongClickListener設(shè)置單擊和長按事件
Flutter:在需要添加事件監(jiān)聽的組件外層嵌套 InkWell 或 GestureDetector 并設(shè)置 onTap 等
3、生命周期
Android:
Activity和Fragment各自有完整的生命周期鏈路onCreate、onStart、onResume、onPause、onDestroy等
Flutter:
萬物皆組件,組件繼承 WidgetsBindingObserver 并重寫 didChangeAppLifecycleState 函數(shù)進(jìn)行監(jiān)聽
退回桌面依次執(zhí)行inactive 》= paused,此時(shí)界面不可見用戶不可操作,從桌面重新進(jìn)入app執(zhí)行resumed,狀態(tài)較少如需在某些條件下觸發(fā)特定操作可能要找別的方案,比如發(fā)通知之類的
開發(fā)中使用ListView循環(huán)嵌套或者使用Column嵌套ListView會(huì)產(chǎn)生hassize報(bào)錯(cuò)
原因是因?yàn)長istView沒有固定尺寸導(dǎo)致
可以在ListView中進(jìn)行如下操作即可解決:(根據(jù)內(nèi)部子widget尺寸,自動(dòng)撐起整個(gè)ListView)
如果內(nèi)部嵌套的是Column
通過以下命令解決
執(zhí)行完畢后,F(xiàn)lutter module將會(huì)創(chuàng)建在ios項(xiàng)目/my_flutter目錄下
將Flutter模塊嵌入到現(xiàn)有iOS應(yīng)用程序中有兩種方式:
此方法需要所有的相關(guān)開發(fā)的人員安裝 Flutter 環(huán)境。
需要在my_flutter文件夾下執(zhí)行一下
把.ios和.android等flutter配置生成出來。
AppDelegate.h:
AppDelegate.m:
控制器:
flutter:
注冊(cè)路由
通過全局FlutterEngine實(shí)例化FlutterViewController,并setInitialRoute設(shè)置初始化路由,這里發(fā)現(xiàn)設(shè)置的初始化路由路由并不管用
控制器:
設(shè)置FlutterViewController的pushRoute
這里其實(shí)只是讓flutter方面push一次
新建一個(gè)FlutterViewController并把setInitialRoute設(shè)置為跳轉(zhuǎn)的路由,不通過全局的FlutterEngine創(chuàng)建
放一個(gè)之前自己學(xué)習(xí)時(shí)寫的demo,希望可以幫助新入門的老鐵們,有好的建議可以提一下,我們一起進(jìn)步,奧利給!!!
背景:flutter組件嵌套都很深,依次傳遞數(shù)據(jù)很麻煩,所以最好是能夠跨組件傳遞。有三張跨組件的方式:InheritedWidget、Notification、Eventbus.
是一種自上而下的傳遞數(shù)據(jù)的方式。
使用步驟:
它的數(shù)據(jù)流動(dòng)方式和InheritedWidget剛好相反,從子控件向上面?zhèn)鬟f。
具體使用
跟android 原生的eventbus原理和使用一樣。
如果做這個(gè)篩選界面的時(shí)候,剛開始最外層用Column嵌套一個(gè)Container(紅色部分)和ListView。
然后每個(gè)Item也是Column嵌套一個(gè)Container(大分類)
和GridView(小分類) 。出現(xiàn)的問題就是不能滾動(dòng)。
在Listview和GridView外面嵌套一個(gè)Expanded,不能滾動(dòng)是因?yàn)镃ontainer尺寸計(jì)算的問題,Expande就是listview有多大就有多大。
Item嵌套
彈性布局允許子組件按照一定比例來分配父容器空間
Flex組件和Row、Column屬性主要的區(qū)別就是多一個(gè)direction。
當(dāng)direction的值為Axis.horizontal的時(shí)候,則是Row。
當(dāng)direction的值為Axis.vertical的時(shí)候,則是Column。
它們之中都有主軸(MainAxis)和交叉軸(CrossAxis)的概念:
Row可以沿水平方向排列其子widget。定義如下:
示例1 - 基本使用
示例2 - 基線對(duì)齊
基線是英文字母X的下端兩點(diǎn)連成的一條線
示例3 - 水平方向包裹
Column可以沿垂直方向排列其子widget。定義如下:
Column 基本使用 示例
再看一個(gè)示例
運(yùn)行效果如下:
我們發(fā)現(xiàn)文本并沒有居中?
解釋:
實(shí)際上,Row和Column都只會(huì)在主軸方向占用盡可能大的空間,而交叉軸的長度則取決于他們最大子元素的長度。如果我們想讓本例中的兩個(gè)文本控件在整個(gè)手機(jī)屏幕中間對(duì)齊,我們有兩種方法:
運(yùn)行效果如下:
如果Row里面嵌套R(shí)ow,或者Column里面再嵌套Column,那么只有最外面的Row或Column會(huì)占用盡可能大的空間,里面Row或Column所占用的空間為實(shí)際大小,下面以Column為例說明
如果要讓里面的Column占滿外部Column,可以使用Expanded 組件:
名稱欄目:flutter嵌套,flutter嵌套路由
標(biāo)題路徑:http://chinadenli.net/article34/dseodse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、、微信小程序、網(wǎng)站收錄、自適應(yīng)網(wǎng)站、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)