美文网首页
getx的controller是怎么销毁的

getx的controller是怎么销毁的

作者: 每日总结 | 来源:发表于2021-05-26 18:41 被阅读0次

    getx可以做到通过页面的退出自动控制controller的销毁,那么他是怎么做到的呢

    当我们使用getx的路由套件时,可以看到,他的每个跳转方法都使用了自定义的GetPageRoute
    GetPageRoute中对于此次的问题,我们需要关注的是两个方法

    buildPage

    嗯,这里给传了一个reference给了Get.reference,这个reference看一下是什么玩意。。

    reference
    哦哦,简单来说就是页面的标识。
    嗯,接下来是中间件的runner、binding,嗯,pageToBuild了解了。
    那么看看另一个方法 dispose

    dispose,route退出流程里调用的方法。在这里面Get做了两件事,我们主要关注第一件事,removeDependencyByRoute()参数是上面的页面标识。

    removeDependencyByRoute

    这个方法里,我们可以看到调用了GetInstancedelete方法,这个方法就是销毁controller的方法,但是为什么呢?为啥传一个页面标识就能删除到对应的controller呢。我们接着看

    我们都知道我们在使用getx的controller时,一定会有两个操作,一个是Get.put(),一个是Get.find()让我们一个一个的看一下

    Get.put()

    GetInstance().put()
    _insert()

    Get.put的本质其实是将我们传入的实例,根据类Stag创建一个key,然后以key和实例作为键值对存入了全局的map中(此处是简单理解,看也看得出来不是直接传实例了)

    Get.find()

    GetInstance().find()

    Get.find方法很简单的只是通过类Stag去全局map中找一个实例返回出去,但是返回之前,还做了一步操作,即_initDependencies

    _initDependencies

    _initDependencies

    看到没,就在下面Get.reference,之前在GetPageRoute的页面构建之前赋值了最近的页面,然后在此处用来做routesKey的value和前面的controller的key值进行绑定。

    这也是得益于flutter是个单线程模型,才能这样无脑的通过这种方式传值。其实getx中有不少让人觉得神奇的地方都是利用了单线程的优势,比如Obx的自动刷新,也是在Obx的build方法和Rx的value的get方法之间通过一个全局指针来进行传值。

    相关文章

      网友评论

          本文标题:getx的controller是怎么销毁的

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