Flutter生命周期

作者: 鹿蜀先生191 | 来源:发表于2020-07-25 11:42 被阅读0次

    一、概述

    生命周期是一个从创建到销毁的过程,Flutter生命周期分为两部分:
    1.Widget的生命周期
    2.APP的生命周期

    生命周期图

    二、Widget的生命周期

    1.StatelessWidget
    对于StatelessWidget来说,生命周期只有build过程。build是用来创建Widget的,在每次页面刷新时会调用build。

    2.StatefulWidget
    StatefulWidget的生命周期依次为:

    • createState
    • initState
    • didChangeDependencies
    • build
    • addPostFrameCallback
    • didUpdateWidget
    • deactivate
    • dispose
    createState

    createState是StatefulWidget来创建State的方法,只调用一次,

    class PdfIntroduce extends StatefulWidget {
      @override
      _PdfIntroduce createState() => _PdfIntroduce();
    }
    
    initState

    initState是StatefulWidget创建后调用的第一个方法,而且只执行一次。在执行initState时,View没有渲染,但是StatefulWidget 已经被加载到渲染树里了,这事的StatefulWidget的mount的值会变为true,知道dispose才会变为false.一般我们把初始化的一些操作都放在initState中。

    @override
    void initState() {
      super.initState();
      ...
    }
    
    didChangeDependencies

    didChangeDependencies会在initState后立即调用,之后只有当StatefulWidget依赖的InheritedWidget发生变化之后,didChangeDependencies才会调用,所以didChangeDependencies可以调用多次。

    build

    build方法会在didChangeDeoendencies之后立即调用,在之后setState()刷新时,会重新调用build绘制页面,所以build方法可以调用多次。但一般不再build中创建除创建Widget的方法,否则会影响渲染效率。

    class PdfIntroduce extends StatefulWidget {
      @override
      _PdfIntroduce createState() => _PdfIntroduce();
    }
    
    addPostFrameCallback

    addPostFrameCallback是StatefulWidget渲染结束之后的回调,只会调用一次,一般是在initState里添加回调:,

    import 'package:flutter/scheduler.dart';
    @override
    void initState() {
      super.initState();
      SchedulerBinding.instance.addPostFrameCallback((_) => {});
    }
    
    didUpdateWidget
    deactivate(组件移除时)
    dispose(组件移除时)

    一般在dispose中做一些取消监听、动画的操作,和initState相对使用。

     @override
      void dispose() {
        super.dispose();
        _controller.dispose();
      }
    

    三、APP的生命周期

    AppLifecycleState就是App的生命周期,包含四个:

    • resumed
    • inactive
    • paused
    • suspending

    相关文章

      网友评论

        本文标题:Flutter生命周期

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