bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

flutter選中狀態,flutter 保持頁面狀態

Flutter狀態管理--GetX的簡單使用

一、前言

創新互聯公司是一家專注于網站制作、成都網站建設與策劃設計,溧陽網站建設哪家好?創新互聯公司做網站,專注于網站建設十余年,網設計領域的專業建站公司;建站業務涵蓋:溧陽等地區。溧陽做網站價格咨詢:028-86922220

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

二、 GetX

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

1、相關優勢:

三、使用

1、第一步 引入get

2、第二步

修改入口、配置路由

3、路由

Routes類

Pages類

4、狀態管理

我一般一個page對應一個controller, controller來處理邏輯,控制page.

簡單使用

5、依賴注入

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

第一步

第二步

6、跨頁面交互

7、黑暗模式

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

Flutter (三) 狀態管理

Flutter (二)布局

Flutter (三) 狀態管理

Flutter (四) Map轉模型

Flutter (五) 網絡請求

Flutter (六) 保留界面狀態

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

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

Flutter的setState(狀態刷新)

Flutter有兩個常用的狀態類:

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

當前Element節點被標記為dirty,同時調用owner的scheduleBuildFor方法:

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

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

ensureVisualUpdate 方法定義在SchedulerBinding類中:

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

提交給引擎繪制之后,會收到onDrawFrame的回調,最終執行到_handleDrawFrame方法中,對應的是handleDrawFrame方法,定義在SchedulerBinding類中:

在RendererBinding的initInstances方法中添加了一個回調到這個List中,對應的是RenderBinding的drawFrame方法,對應的節點進行繪制渲染操作。

WidgetsBinding中的drawFrame方法:

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

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

提交給引擎繪制渲染

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

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

Flutter狀態管理(五):Redux

Flutter狀態管理系列:

Flutter狀態管理(一):ScopedModel

Flutter狀態管理(二):Provider

Flutter狀態管理(三):BLoC(Business Logic Component)

Flutter狀態管理(四):ReactiveX之RxDart

Flutter狀態管理(五):Redux

有做過H5前端開發的朋友應該很早就接觸過這個,Redux在React/VUE中,與在Flutter/Dart中概念一樣,沒有任何區別;唯一的區別只是使用上的不同。

它主要由三部分組成:

下圖是一個完整的數據觸發及更新流程:

我們看到上面整個數據流,都是單向的,由View發起,最后到View的更新;

為啥這樣設計?

小節二介紹了Redux最基本的原理,但是,如何用Redux來做一些異步操作,比如:加載數據、請求API等?這里就引出來了Redux的中間件(Middleware),中間件能夠讓我們使得action在到達reducer之前,做些其它“動作”!有了中間件,我們不但可以請求API,還可以改變action,使得分發到其它reducer中去;

上圖是有Middleware的流程圖。

Redux在Flutter中的使用與在JavaScript中的使用方式稍微有點不同,為啥?

因為JavaScript是弱類型語言,而Dart是強類型語言,這就使得在JS中每個reducer可以獨立管理,而在Flutter中需要由一個大對象來管理!

無論在JS中還是在Flutter中,通常都將action、reducer、store各自建一目錄,放在redux目錄下,目錄結構如下:

ReduxPage在build中,也可以直接用StoreBuilder(參考ReduxPage2中寫法),因為StoreBuilder也是InheritedWidget。

正因為Redux在Flutter中與在JS中不同,因此,在Flutter中,建議:

本文名稱:flutter選中狀態,flutter 保持頁面狀態
標題URL:http://vcdvsql.cn/article48/dsdiohp.html

成都網站建設公司_創新互聯,為您提供靜態網站、App開發、網站營銷、定制網站、網站設計公司用戶體驗

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設