Flutter - Widget的生命周期

作者: Lcr111 | 来源:发表于2021-12-23 14:57 被阅读0次

前言


生命在于不断学习,探索未知的世界!!!


就像在iOS开发中ViewController有生命周期一样,Flutter中的widget对象也有它的生命周期,那么今天我们就来一探究竟!

生命周期

什么是生命周期?
说白了生命周期就是一系列回调方法,从初始化到销毁的这么一个过程,每个回调方法就是让我们知道当前的这个Widget正在处于什么样的状态!
生命周期有啥作用?

  1. 监听Widget的事件
  2. 初始化数据
    • 创建数据
    • 发送网络数据
  3. 内存管理
    • 销毁数据、销毁监听者
    • 销毁Timer 等等

StatelessWidget 的生命周期

下面我们通过一个例子:

class StateLessDemo extends StatelessWidget {
  final String? title;
  StateLessDemo({this.title}) {
    print('构造函数被调用了');
  }

  @override
  Widget build(BuildContext context) {
    print('build方法被调用了');
    return Scaffold(
        appBar: AppBar(
          title: Text('demo'),
        ),
        body: Center(
          child: Text(title ?? 'lcr'),
        ));
  }
}
StatelessWidget生命周期
由打印结果可知,StatelessWidget 的生命周期中包括构造方法build方法。(当然,此处没有写dispose方法)

StatefullWidget的生命周期

同样我们举个例子:

class MyHomePage extends StatefulWidget {
  final String? title;
  MyHomePage({this.title}) {
    print('Widget构造函数被调用了!');
  }

  @override
  // ignore: no_logic_in_create_state
  _MyHomePageState createState() {
    print('createState来了!');
    return _MyHomePageState();
  }
}

class _MyHomePageState extends State<MyHomePage> {
  int _count = 0;

  _MyHomePageState() {
    print('State的构造方法');
  }
  @override
  void initState() {
    print('State的init方法');
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    print('State的build方法被调用了!');
    return Scaffold(
      appBar: AppBar(
        title: Text('demo'),
        backgroundColor: Colors.blue,
      ),
      body: Column(
        children: [
          ElevatedButton(
              onPressed: () {
                _count++;
                setState(() {});
              },
              child: const Icon(Icons.add)),
          Text('$_count')
        ],
      ),
    );
  }

  @override
  void dispose() {
    print('State的dispose');
    super.dispose();
  }

  @override
  void didChangeDependencies() {
    print('didChangeDependencies');
    super.didChangeDependencies();
  }
}
StatefullWidget生命周期
从打印结果来看,StatefullWidget 的生命周期的回调方法就更多了,因为其中包含了两个对象(WidgetState)。
  1. 构造Widget这个对象
  2. 调用CreateState去构建State对象
  3. State对象的构造方法
  4. State对象initState方法(一般初始化数据及网络请求数据在这步进行)
  5. didChangeDependencies方法 (改变依赖关系,依赖的InheritedWidget发生变化之后,方法也会调用,这是和数据共享有关,之后的文章会详细举例)
  6. State 的build方法
  7. Widget 销毁时,会调用State的dispose方法
点击➕按钮
当我们点击加按钮时,_count++,setState(() {}),随即打印的结果如下图:
setState时打印

所以,当setState调用时,只有State的build方法会重新运行,也就是界面会重新渲染

相关文章

  • Flutter的生命周期

    Flutter 的生命周期分为两个部分: Widget的生命周期 App的生命周期 Flutter里的Widget...

  • Flutter 页面生命周期

    Flutter 页面生命周期就是 Flutter 页面组件 Widget 的生命周期。 Flutter 有两种组件...

  • Flutter 的生命周期(转载)

    一,概述 Flutter 的生命周期分为两个部分: Widget 的生命周期 App 的生命周期 二,Widget...

  • Flutter 的生命周期

    Flutter 的生命周期Flutter 的生命周期分为两个部分: Widget 的生命周期App 的生命周期Fl...

  • Flutter 生命周期

    前提 Flutter 的生命周期分为两个部分: 1.Widget 的生命周期2.App 的生命周期 Widget的...

  • 监听Flutter的生命周期

    监听Flutter的生命周期 要了解Widget,就需要先知道Widget的生命周期。 这里说到的生命周期分为两个...

  • Flutter的生命周期

    Flutter的生命周期 1、widget的生命周期 1.1 StatelessWidget 的生命周期(只有bu...

  • Flutter生命周期及监听状态

    Flutter Widget生命周期分为3个阶段: 1.创建: 构造方法:Flutter通过StatefulWid...

  • flutter学习资源

    一、我的github的flutter中的demo项目,持续更新中。。。 flutter_widget组件生命周期的...

  • [Flutter] 10-Flutter的生命周期

    本章介绍 Flutter 的组件,以及组件的生命周期。 一、组件 Widget定义 Flutter 中的组件与前端...

网友评论

    本文标题:Flutter - Widget的生命周期

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