当前位置: 首页 > article >正文

Flutter:Widget生命周期

StatelessWidget:无状态部件的生命周期

import 'package:flutter/material.dart';

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(title: 'MyHome'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final String? title;
  MyHomePage({this.title}) {
    print('MyHomePage:构造函数被调用了');
  }
  @override
  Widget build(BuildContext context) {
    print('build:被调用了');
    return Center(
      child: Text(title!),
    );
  }
}
// 执行顺序:MyHomePage:构造函数被调用了 -> build:被调用了

StatefulWidget:有状态部件的生命周期

import 'package:flutter/material.dart';

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(title: 'MyHome'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String? title;
  MyHomePage({this.title}) {
    print('Widget:构造函数被调用');
  }
  @override
  State<MyHomePage> createState(){
    print('createState:被调用');
    return _MyHomePageState();
  }
}

class _MyHomePageState extends State<MyHomePage> {
  // 这个方法一般忽略不写
  _MyHomePageState(){
    print('State 的 _MyHomePageState:构造函数被调用');
  }

  @override
  void initState() {
    print('State 的 initState:被调用');
    super.initState();
  }
  
  @override
  void didChangeDependencies() {
    print('didChangeDependencies:被调用(改变依赖关系)');
    super.didChangeDependencies();
  }
  
  @override
  Widget build(BuildContext context) {
    print('build:被调用');
    return Center(
      child: Text(widget.title!),
    );
  }

  @override
  void dispose() {
    print('State 的 dispose:销毁被调用');
    super.dispose();
  }
}

// 执行顺序:
Widget:构造函数被调用
createState:被调用
State 的 _MyHomePageState:构造函数被调用
State 的 initState:被调用
didChangeDependencies:被调用(改变依赖关系)
build:被调用

当离开页面
当Widget销毁时:State 的 dispose:被调用

// 如果在有状态的组件中 更新数据,需要调用:setState会重新调用build进行渲染
setState(() {
      
});

http://www.kler.cn/a/394437.html

相关文章:

  • 【JetPack】Navigation知识点总结
  • C/C++基础错题归纳
  • springboot vue 会员营销系统
  • Java内存区域进一步详解
  • kotlin中泛型中in和out的区别
  • Qt笔记:网络编程UDP
  • Spring MVC进阶
  • R语言基础| 机器学习
  • 改扩配系列:浪潮英政服务器CS5280H2、IR5280H2——后置SATA、NVME硬盘安装
  • SpringBoot实战:AI大模型+亮数据代理高效获取视频资源
  • 【Apache Paimon】-- 1 -- Apache Paimon 是什么?
  • Python Pandas 结构之 Series 和 DataFrame
  • NFS存储基础操作
  • PostgreSQL 行转列实现
  • 存储大挑战:如何在可靠性与大容量之间玩转平衡术?
  • LabVIEW 使用 Snippet
  • 【Excel】数据透视表分析方法大全
  • 【C++进阶实战】基于linux的天气预报系统
  • CTF攻防世界小白刷题自学笔记15
  • 【Golang】golang框架,为什么选择GoFrame, GoFrame使用心得
  • Electron 项目中杀掉进程的不同方式
  • 《FreeRTOS列表和列表项篇》
  • 6.584-Lab1:MapReduce
  • 深入解析 OpenHarmony 构建系统-1
  • 制作图片木马
  • 为什么海外服务器IP会被封