Fish_redux Page里為什么可以createState

Page是繼承自Component,在buildPage時(shí),由父類(lèi)Component的_wrapper調(diào)用一個(gè)私有的_pageWidget,這個(gè)_pageWidget繼承自StatefulWidget,它是根據(jù)傳入的參數(shù)來(lái)構(gòu)建的。

Component里的_wrapper是一個(gè)函數(shù)簽名typedef WidgetWrapper = Widget Function(Widget child);,Component初始化時(shí)接收傳入的wrapper,如果wrapper為空,則使用一個(gè)默認(rèn)的_wrapperByDefault作為wrapper,這個(gè)_wrapperByDefault單單的返回child,static Widget _wrapperByDefault(Widget child) => child;

Component類(lèi)里自定義了createState()函數(shù),返回一個(gè)繼承自State的ComponentState,這個(gè)state是搭配著ComponentWidget的,繼承自StatefulWidget。在Component的buildComponent方法內(nèi)判斷如果不是pureView會(huì)返回ComponentWidget。pureView的判斷如下:

bool isPureView() {
    return protectedReducer == null &&
        protectedEffect == null &&
        protectedDependencies == null;
  }

pureView是不持有當(dāng)前的component的,只有ComponentWidget持有當(dāng)前的component

我們都知道在類(lèi)似使用動(dòng)畫(huà)時(shí)要混入一個(gè)TickerProvider,是在State定義時(shí)with上去的,TickerProviderStateMixin是在State上的一個(gè)mixin,它是配套給StatefulWidget的state的生命周期使用的,在page里沒(méi)有定義哪個(gè)方法可以取到_pageWidget的state,也沒(méi)有暴露出相關(guān)createState方法,無(wú)法將其掛載到其私有的_pageState上,則可以重寫(xiě)父類(lèi)Component那個(gè)自定義的createState方法,在這里混入,因?yàn)镃omponent的createState方法,直接返回的就是ComponentState。ComponentState<T> createState() => ComponentState<T>(); 而且與ComponentState搭配的ComponentWidget,其重寫(xiě)的createState方法,也是調(diào)用的這個(gè)ComponentState<T> createState() => component.createState();

但是這里僅僅是一個(gè)方法,要如何mixin呢,可以extends ComponentState,在這上面mixin,然后createState里返回它就行了,后續(xù)就把它當(dāng)state用即可,也不需要callSuper,它就是一個(gè)獨(dú)立的ComponentState,繼承自State,重寫(xiě)了build方法等一系列應(yīng)該有的方法,而且只是混入,其他方法還是用父類(lèi)ComponentState的。

建議搭配下一篇姊妹篇一起

各位大佬我是一個(gè)菜狗,如編寫(xiě)有誤,還請(qǐng)幫忙指正,不勝感激

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

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

  • 1.案例實(shí)現(xiàn) 阿里巴巴閑魚(yú)出品的fish-redux,針對(duì)于大型互聯(lián)網(wǎng)項(xiàng)目推薦使用的一種狀態(tài)管理框架,今天來(lái)擼一擼...
    程序員要多喝水閱讀 587評(píng)論 0 1
  • 好久沒(méi)更新文章了,最近趁著娃睡覺(jué)的功夫,嘗試了下 fish_redux,這邊做下記錄,安全無(wú)毒,小伙伴們可放心食用...
    Kuky_xs閱讀 3,618評(píng)論 3 12
  • 邂逅FLutter 萬(wàn)物皆是Widget 一般縮進(jìn)2個(gè)空格 文字居中 Widget Center() Materi...
    JackLeeVip閱讀 3,504評(píng)論 0 4
  • 概述 為什么需要狀態(tài)管理? 共享狀態(tài)管理 一. 為什么需要狀態(tài)管理? 1.1、認(rèn)識(shí)狀態(tài)管理很多從命令式編程框架(A...
    IIronMan閱讀 561評(píng)論 0 1
  • With 關(guān)鍵字的使用 with是dart的關(guān)鍵字,意思是混入的意思,就是說(shuō)可以將一個(gè)或者多個(gè)類(lèi)的功能添加到自己的...
    憶往昔Code閱讀 3,149評(píng)論 0 0

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