美文网首页
Fish_redux Page里为什么可以createState

Fish_redux Page里为什么可以createState

作者: louis_newman | 来源:发表于2021-09-17 11:20 被阅读0次

    Page是继承自Component,在buildPage时,由父类Component的_wrapper调用一个私有的_pageWidget,这个_pageWidget继承自StatefulWidget,它是根据传入的参数来构建的。

    Component里的_wrapper是一个函数签名typedef WidgetWrapper = Widget Function(Widget child);,Component初始化时接收传入的wrapper,如果wrapper为空,则使用一个默认的_wrapperByDefault作为wrapper,这个_wrapperByDefault单单的返回child,static Widget _wrapperByDefault(Widget child) => child;

    Component类里自定义了createState()函数,返回一个继承自State的ComponentState,这个state是搭配着ComponentWidget的,继承自StatefulWidget。在Component的buildComponent方法内判断如果不是pureView会返回ComponentWidget。pureView的判断如下:

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

    pureView是不持有当前的component的,只有ComponentWidget持有当前的component

    我们都知道在类似使用动画时要混入一个TickerProvider,是在State定义时with上去的,TickerProviderStateMixin是在State上的一个mixin,它是配套给StatefulWidget的state的生命周期使用的,在page里没有定义哪个方法可以取到_pageWidget的state,也没有暴露出相关createState方法,无法将其挂载到其私有的_pageState上,则可以重写父类Component那个自定义的createState方法,在这里混入,因为Component的createState方法,直接返回的就是ComponentState。ComponentState<T> createState() => ComponentState<T>(); 而且与ComponentState搭配的ComponentWidget,其重写的createState方法,也是调用的这个ComponentState<T> createState() => component.createState();

    但是这里仅仅是一个方法,要如何mixin呢,可以extends ComponentState,在这上面mixin,然后createState里返回它就行了,后续就把它当state用即可,也不需要callSuper,它就是一个独立的ComponentState,继承自State,重写了build方法等一系列应该有的方法,而且只是混入,其他方法还是用父类ComponentState的。

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

    各位大佬我是一个菜狗,如编写有误,还请帮忙指正,不胜感激

    相关文章

      网友评论

          本文标题:Fish_redux Page里为什么可以createState

          本文链接:https://www.haomeiwen.com/subject/tuejgltx.html