流式布局(Liquid)的特點(也叫"Fluid") 是頁面元素的寬度按照屏幕分辨率進(jìn)行適配調(diào)整,但整體布局不變。柵欄系統(tǒng)(網(wǎng)格系統(tǒng)),用戶標(biāo)簽等。在Flutter中主要有Wrap和Flow兩種Widget實現(xiàn)。
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),恭城企業(yè)網(wǎng)站建設(shè),恭城品牌網(wǎng)站建設(shè),網(wǎng)站定制,恭城網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,恭城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
在介紹Row和Colum時,如果子widget超出屏幕范圍,則會報溢出錯誤,在Flutter中通過Wrap和Flow來支持流式布局,溢出部分則會自動折行。
上述有很多屬性和Row的相同,其意義其實也是相同的,這里我就不一一介紹了,主要介紹下不同的屬性:
我們一般很少會使用Flow,因為其過于復(fù)雜,需要自己實現(xiàn)子widget的位置轉(zhuǎn)換,在很多場景下首先要考慮的是Wrap是否滿足需求。Flow主要用于一些需要自定義布局策略或性能要求較高(如動畫中)的場景。Flow有如下優(yōu)點:
我們對六個色塊進(jìn)行自定義流式布局:
實現(xiàn)TestFlowDelegate:
可以看到我們主要的任務(wù)就是實現(xiàn)paintChildren,它的主要任務(wù)是確定每個子widget位置。由于Flow不能自適應(yīng)子widget的大小,我們通過在getSize返回一個固定大小來指定Flow的大小,實現(xiàn)起來還是比較麻煩的。
與iOS的ViewController、Android的Activity一樣,F(xiàn)lutter中的Widget也存在生命周期,并且通過State來提現(xiàn)。而App則是一個特殊的Widget,除了需要處理視圖顯示的各個階段,還需要應(yīng)對應(yīng)用從啟動到退出所經(jīng)歷的各個狀態(tài)。
State的生命周期,指的是在用戶參與的情況查下,其關(guān)聯(lián)的Widget所經(jīng)歷的從創(chuàng)建到顯示再到更新最后到停止,直至銷毀的各個過程階段。
這些不同的階段涉及到的特定的任務(wù)處理,正確理解State的生命周期至關(guān)重要,State的生命周期流程圖圖,如下所示:
從圖中可以看到,State的生命周期可以分為3個階段:創(chuàng)建、更新、銷毀。下面將介紹每一個階段的具體流程
State初始化時會依次執(zhí)行:構(gòu)造方法 - initState - didChangeDependencies - build,隨后完成頁面渲染
Widget的狀態(tài)更新,主要由3個方法觸發(fā):setState、didChangeDependencies與didUpdateWidget。
一旦這三個方法被調(diào)用,F(xiàn)lutter就回銷毀舊的Widget,并調(diào)用build方法重建Widget
組件銷毀相對比較簡單,組件被移除,或者頁面銷毀的時候,系統(tǒng)會調(diào)用deactivate和dispose這兩個方法來移除或銷毀組件
下面這張表格也可以幫助我們理解記憶這些調(diào)用實際
視圖的生命周期,定義了視圖的加載到構(gòu)建的全過程,其回調(diào)機(jī)制能夠確保我們可以更具視圖的狀態(tài)選擇合適的時間做恰當(dāng)?shù)氖虑椋鳤pp的生命周期,則定義了App從啟動到退出的全過程
在原生Android、iOS開發(fā)中,有時我們需要再對應(yīng)的App生命周期事件中做相應(yīng)的處理,比如App從后臺進(jìn)入前臺,從前臺退出后臺,或者在UI繪制完成后做一些處理。
這樣的需求,在原生開發(fā)中,可以通過重寫Activity、ViewController生命周期回調(diào)方法,或者是注冊應(yīng)用程序的相關(guān)通知來兼容App的生命周期并做相應(yīng)的處理。而在Flutter中,我們可以利用WidgetsBindingObserver類,來實現(xiàn)同樣的需求。
下面我們看看WidgetsBindingObserver中具體有哪些回調(diào)函數(shù):
didChangeAppLifecycleState回調(diào)函數(shù)中,有一個參數(shù)類型為AppLifecycleState的枚舉類型,這個枚舉類型是Flutter對App生命周期狀態(tài)的封裝,它的常用狀態(tài)包括:
可以將App切前后臺,控制臺輸出的App狀態(tài),可以發(fā)現(xiàn):
我們可以通過下面的這張圖直觀的了解狀態(tài)切換過程
除了需要監(jiān)聽App的生命周期回調(diào)做相應(yīng)處理外,根據(jù)不同的需求,我們需要再組件宣講之后做一些與顯示安全相關(guān)的操作,在iOS中,可以通過GCD的方法,讓操作在下一個RunLoop執(zhí)行,在Android中,可以通過View.post()插入消息隊列,來保證在組件渲染后進(jìn)行相關(guān)操作。在Flutter中實現(xiàn)同樣的需求會更簡單:使用WidgetsBinding來實現(xiàn)即可
WidgetsBinding提供了單詞Frame繪制回調(diào)和實時Frame繪制回調(diào)兩種機(jī)制來滿足不同的需求場景:
在移動端,各個平臺或 UI 系統(tǒng)的原始指針事件模型基本都是一致,即:一次完整的事件分為三個階段:手指按下、手指移動、和手指抬起,而更高級別的手勢(如點擊、雙擊、拖動等)都是基于這些原始事件的。
Flutter 中可以使用 Listener widget 來監(jiān)聽原始觸摸事件,它也是一個功能性 widget。
Listener 的常見屬性
用法如下:
加載更多需要對 ListView 進(jìn)行監(jiān)聽,所以需要進(jìn)行監(jiān)聽器的設(shè)置,在 State 中進(jìn)行監(jiān)聽器的初始化。
2、使用上述的 Listener 來監(jiān)聽,通過 Listener 的 onPointerMove(手指在屏幕上滑動)來監(jiān)聽滑動的距離,當(dāng)滑動到底部時加載更多數(shù)據(jù)
本次主要是記錄Fultter Theme主題的設(shè)備與AppBar中的一些屬性的使用及說明。目前項目開發(fā)有了四個界面。前期主題沒太注意,今天看來要好好總結(jié)一下近期所學(xué)。
首先,Android主題沉浸式設(shè)置,F(xiàn)lutter篇:
根據(jù)字面意思就能看出來是對狀態(tài)懶得設(shè)置,其中用到了 dart:io 與 flutter/services.dart 這兩個重點Mark一下,有時間深入探究一下用法跟能力。回歸正題。
主題數(shù)據(jù),其中最常用的是 primarySwatch 、 primaryColor 、 accentColor 。
primarySwatch:UI右下角的FloatingActionButton的顏色就是默認(rèn)取值MaterialColor,
默認(rèn)是藍(lán)色的,如果修改成primarySwatch,就會變成這個顏色值。只支持MaterialColor。
primaryColor:頂部導(dǎo)航欄和狀態(tài)欄的顏色修改,需要用到這個屬性,類型 Color。
accentColor:前景色(文本、按鈕、覆蓋邊緣效果等)。
看一下項目中的使用
其中 brightness 主題設(shè)置較為關(guān)鍵,它是設(shè)置狀態(tài)欄圖標(biāo)與字體顏色的。
brightness: Brightness.dark 狀態(tài)欄圖標(biāo)與字體顏色為白色。
brightness: Brightness.light 狀態(tài)欄圖標(biāo)與字體顏色為黑色。
iconTheme :設(shè)置appbar icon的顏色,appbar中icon的顏色會根據(jù)primaryColor的改變來確定自身的顏色,這里可以在iconTheme中指定icon的顏色。
默認(rèn)不做修改前:
原因:在flutter中,鍵盤彈起時系統(tǒng)會縮小Scaffold的高度并重建
1)把Scaffold的resizeToAvoidBottomInset屬性設(shè)置為false,這樣在鍵盤彈出時將不會resize
2)把寫死的高度改為 原高度 - MediaQuery.of(context).viewInsets.bottom ,鍵盤彈出時布局將重建,而這個 MediaQuery.of(context).viewInsets.bottom 變量在鍵盤彈出前是0,鍵盤彈起后的就是鍵盤的高度
將輸入框放進(jìn)可滾動的Widget中即可,當(dāng)輸入框獲取焦點后,系統(tǒng)會自動將它滑動到可視區(qū)域
一. flutter中我們想加載本地圖片,需要兩步:
二. flutter項目中本地圖片加載的原理
在加載圖片時,系統(tǒng)自動會根據(jù)屏幕分辨率優(yōu)先選擇到符合自己分配率的文件夾(2.0x或者3.0x或者4.0x)下去取相對應(yīng)的圖片,如果當(dāng)前文件夾下沒有,則會到低一倍的文件夾下去,如果還沒有,則繼續(xù)向更低一倍去取。(比如:iOS 5.5英寸及以上屏幕會優(yōu)先選擇去3.0x下去取圖片,如果3.0x不存在或者3.0x文件夾下沒有,則去2.0x下取;如果2.0x不存在或者2.0x下沒有,則去1.0x下取;1.0x下再沒有,則在images文件下取)。
網(wǎng)站題目:flutter中,flutter中文文檔
本文URL:http://chinadenli.net/article46/dsicphg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、虛擬主機(jī)、電子商務(wù)、做網(wǎng)站、微信小程序、品牌網(wǎng)站建設(shè)
聲明:本網(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)