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

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

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

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

一、前言

站在用戶的角度思考問題,與客戶深入溝通,找到渭南網(wǎng)站設(shè)計(jì)與渭南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋渭南地區(qū)。

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

二、 GetX

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

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

三、使用

1、第一步 引入get

2、第二步

修改入口、配置路由

3、路由

Routes類

Pages類

4、狀態(tài)管理

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

簡單使用

5、依賴注入

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

第一步

第二步

6、跨頁面交互

7、黑暗模式

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

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

Flutter (二)布局

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

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

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

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

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

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

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

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

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

當(dāng)前Element節(jié)點(diǎn)被標(biāo)記為dirty,同時(shí)調(diào)用owner的scheduleBuildFor方法:

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

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

ensureVisualUpdate 方法定義在SchedulerBinding類中:

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

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

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

WidgetsBinding中的drawFrame方法:

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

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

提交給引擎繪制渲染

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

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


本文標(biāo)題:flutter狀態(tài),flutter狀態(tài)管理
瀏覽路徑:http://weahome.cn/article/hocisi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部