getx的controller是怎么銷毀的

getx可以做到通過頁面的退出自動控制controller的銷毀,那么他是怎么做到的呢

當(dāng)我們使用getx的路由套件時,可以看到,他的每個跳轉(zhuǎn)方法都使用了自定義的GetPageRoute
GetPageRoute中對于此次的問題,我們需要關(guān)注的是兩個方法

buildPage

嗯,這里給傳了一個reference給了Get.reference,這個reference看一下是什么玩意。。

reference

哦哦,簡單來說就是頁面的標(biāo)識。
嗯,接下來是中間件的runner、binding,嗯,pageToBuild了解了。
那么看看另一個方法

dispose

dispose,route退出流程里調(diào)用的方法。在這里面Get做了兩件事,我們主要關(guān)注第一件事,removeDependencyByRoute()參數(shù)是上面的頁面標(biāo)識。

removeDependencyByRoute

這個方法里,我們可以看到調(diào)用了GetInstancedelete方法,這個方法就是銷毀controller的方法,但是為什么呢?為啥傳一個頁面標(biāo)識就能刪除到對應(yīng)的controller呢。我們接著看

我們都知道我們在使用getx的controller時,一定會有兩個操作,一個是Get.put(),一個是Get.find()讓我們一個一個的看一下

Get.put()

GetInstance().put()

_insert()

Get.put的本質(zhì)其實是將我們傳入的實例,根據(jù)類Stag創(chuàng)建一個key,然后以key和實例作為鍵值對存入了全局的map中(此處是簡單理解,看也看得出來不是直接傳實例了)

Get.find()

GetInstance().find()

Get.find方法很簡單的只是通過類Stag去全局map中找一個實例返回出去,但是返回之前,還做了一步操作,即_initDependencies。

_initDependencies

_initDependencies

看到?jīng)],就在下面Get.reference,之前在GetPageRoute的頁面構(gòu)建之前賦值了最近的頁面,然后在此處用來做routesKey的value和前面的controller的key值進行綁定。

這也是得益于flutter是個單線程模型,才能這樣無腦的通過這種方式傳值。其實getx中有不少讓人覺得神奇的地方都是利用了單線程的優(yōu)勢,比如Obx的自動刷新,也是在Obx的build方法和Rx的value的get方法之間通過一個全局指針來進行傳值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在開發(fā)生產(chǎn)級應(yīng)用程序時,采用最佳軟件工程實踐來實現(xiàn)健壯性和穩(wěn)定性是很重要的。這種做法之一就是依賴注入。依賴注入是將...
    渣渣曦閱讀 4,122評論 0 2
  • GetX第三篇-依賴注入 為什么要使用依賴注入 依賴注入是什么 本來接受各種參數(shù)來構(gòu)造一個對象,現(xiàn)在只接受一個參數(shù)...
    A_si閱讀 13,541評論 11 30
  • 在使用了 Provider 一年后,遇到了很多阻力,期間嘗試過 BLoC 、MobX ,均不如意,一個樣本代碼太多...
    A_si閱讀 5,488評論 10 41
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評論 19 139
  • 表情是什么,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息。高興了當(dāng)然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,936評論 2 7

友情鏈接更多精彩內(nèi)容