真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

flutter頁面狀態(tài),flutter狀態(tài)管理

flutter 頁面的生命周期(轉(zhuǎn))

轉(zhuǎn)自

創(chuàng)新互聯(lián)公司服務(wù)項目包括依蘭網(wǎng)站建設(shè)、依蘭網(wǎng)站制作、依蘭網(wǎng)頁制作以及依蘭網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,依蘭網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到依蘭省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

在 Flutter 中,有兩類常用的 Widget:

在開發(fā)過程中,我們經(jīng)常需要繼承它們兩來實現(xiàn)自己的 Widget。

一個 StatelessWidget 是不能被改變的,比如: Icon 、 Text 等。

如果你的控件一旦顯示,就不需要再做任何的變更,那么你應(yīng)該使用 StatelessWidget 。

實現(xiàn)一個自己的 StatelessWidget 很簡單。

當你看到下面這個例子?時,你就知道它有多簡單了。

看,只要在 build() 中返回你的視圖就可以了。

一個 StatefulWidget 是有狀態(tài)的,可變的。

它可以改變自己的外觀,以響應(yīng)用戶的操作或者數(shù)據(jù)的變化。

比如: CheckBox 、 Switch ..

我們之所以能夠改變一個 StatefulWidget ,是因為它有一個設(shè)置狀態(tài)的函數(shù):

調(diào)用這個函數(shù)后,就會觸發(fā) StatefulWidget 的視圖樹重建。

因此,當我們需要一個可交互的,即能根據(jù)用戶操作或數(shù)據(jù)變化而改變視圖的 Widget 時,那就得用上 StatelessWidget 了。

現(xiàn)在,來創(chuàng)建一個自定義的 StatefulWidget:

從上面的例子中可以看到, StatefulWidget 會要求提供一個含有視圖樹的 State 。

既然 State 能夠控制一個視圖的狀態(tài),那它肯定會有一系列的生命周期。

上圖就是 State 的生命周期圖。

Flutter狀態(tài)管理--GetX的簡單使用

一、前言

Flutter開發(fā),就需要對各種狀態(tài)的管理,就是在請求數(shù)據(jù)的時候需要實時變化,各種交互變化等,在沒有使用GetX之前使用Provider,用Provider的時候覺得真香,挺方便的,需要刷新的時候直接 notifyListeners(); 用了GetX之后覺得Provider太繁瑣了。這邊介紹下GetX的使用以及常用的方法。

二、 GetX

GetX 是 Flutter 上的一個輕量且強大的解決方案:高性能的狀態(tài)管理、智能的依賴注入和便捷的路由管理。

1、相關(guān)優(yōu)勢:

三、使用

1、第一步 引入get

2、第二步

修改入口、配置路由

3、路由

Routes類

Pages類

4、狀態(tài)管理

我一般一個page對應(yīng)一個controller, controller來處理邏輯,控制page.

簡單使用

5、依賴注入

依賴注入也是我喜歡的,可以減少很多工作。

第一步

第二步

6、跨頁面交互

7、黑暗模式

可以參考前期寫的博客。 黑暗模式的適配

Flutter的setState(狀態(tài)刷新)

Flutter有兩個常用的狀態(tài)類:

標記為dirty,執(zhí)行的markNeedsBuild,定義在Element類中:

當前Element節(jié)點被標記為dirty,同時調(diào)用owner的scheduleBuildFor方法:

將element元素添加到全局的“臟”鏈表里。

BuildOwner用來管理哪些需要更新的Widget。這個owner最開始被初始化的地方在WidgetsBinding的initInstances方法中,隨后初始化了onBuildScheduled方法,對應(yīng)執(zhí)行的是_handleBuildScheduled,定義在WidgetsBinding類中:

ensureVisualUpdate 方法定義在SchedulerBinding類中:

在提交下一幀繪制的時候會調(diào)用到scheduleFrame方法,提交給引擎繪制,看看scheduleFrame方法,也定義在SchedulerBinding類中:

提交給引擎繪制之后,會收到onDrawFrame的回調(diào),最終執(zhí)行到_handleDrawFrame方法中,對應(yīng)的是handleDrawFrame方法,定義在SchedulerBinding類中:

在RendererBinding的initInstances方法中添加了一個回調(diào)到這個List中,對應(yīng)的是RenderBinding的drawFrame方法,對應(yīng)的節(jié)點進行繪制渲染操作。

WidgetsBinding中的drawFrame方法:

看看這里的buildScope方法,定義在BuildOwner方法中。在上面 scheduleBuildFor 方法介紹中有提到:"scheduleBuildFor 是把一個 element 添加到 _dirtyElements 鏈表,以便當[WidgetsBinding.drawFrame]中調(diào)用 buildScope 的時候能夠重構(gòu) element。onBuildScheduled()是一個 BuildOwner 的回調(diào)"。在 drawFrame 中調(diào)用 buildOwner.buildScope(renderViewElement)更新 elements。

_dirtyElements列表在遍歷的過程中執(zhí)行rebuild方法,此時將所有標記為dirty的Element節(jié)點依次執(zhí)行rebuild,preformRebuild,build,updateChild,update方法,執(zhí)行界面更新。完成build,update操作完成之后,后續(xù)會將需要繪制的RenderObject添加到需要layout的列表中,等待繪制渲染。所有繪制完成之后將_dirtyElments列表清空,_inDirtyList標記位置為false。

提交給引擎繪制渲染

看看super.drawFrame(),這里就執(zhí)行到了RendererBinding類中,定義如下:

這里就是將最終需要繪制渲染的畫面提交給引擎的地方了,繪制完成之后就在界面顯示更新后的視圖了。

Flutter 保持頁面緩存 保持頁面狀態(tài)

在默認情況下頁面切換走時會被銷毀,頁面切換回來時會被重新創(chuàng)建,如果頁面中有列表那么整個列表將會被重新創(chuàng)建,降低了用戶體驗,下面是解決這個問題的幾種處理方式

Flutter (三) 狀態(tài)管理

Flutter (二)布局

Flutter (三) 狀態(tài)管理

Flutter (四) Map轉(zhuǎn)模型

Flutter (五) 網(wǎng)絡(luò)請求

Flutter (六) 保留界面狀態(tài)

Flutter (七) 混合開發(fā) [配置]

Flutter (八) 混合開發(fā) [Flutter完整項目嵌入到原生]


文章名稱:flutter頁面狀態(tài),flutter狀態(tài)管理
本文來源:http://weahome.cn/article/dscosjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部