IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter 生命周期,状态类的用法 -> 正文阅读

[移动开发]Flutter 生命周期,状态类的用法

生命周期


State 类


有状态组件的逻辑和内部状态。
有状态组件中的状态是指(1)在构建小部件时可以同步读取的信息,以及(2)在小部件的生命周期内可能发生会发生变化。在状态更改时,组件的实现者有责任使用State.setState方法确保及时通知。

状态对象是由框架在将StatefulWidget组件插入到组件树中时,通过调用StatefulWidget.createState方法创建的。因为一个有状态组件可能会被插入到组件树中多次,所以对应的状态对象也会有多个。类似地,如果从树中删除StatefulWidget,然后再次插入到树中,框架将再次调用StatefulWidget.createState以创建新的状态对象,从而简化状态对象的生命周期。

生命周期

状态对象有以下的生命周期:
1 框架通过调用StatefulWidget.createState创建状态对象。
2 新创建的状态对象与BuildContext关联。此关联是永久性的:状态对象永远不会更改其BuildContext。但是,BuildContext本身可以在树及其子树周围移动。此时,状态对象被视为已装入。
3 框架调用initState。State的子类应该重写initState,以执行依赖于BuildContext或小部件的一次性初始化,在调用initState方法时,它们分别作为上下文和小部件属性可用。
4 该框架调用didChangeDependencies。State的子类应该覆盖didChangeDependencies,以执行涉及继承小部件的初始化。如果调用BuildContext.dependonheritedwidgetofexacttype,那么如果继承的小部件随后发生更改或者小部件在树中移动,则将再次调用didChangeDependencies方法
5 此时,State对象已完全初始化,框架可能会多次调用其build方法以获取此子树的用户界面描述。状态对象可以通过调用其setState方法自发地请求重建其子树,这表明其某些内部状态已发生更改,可能会影响此子树中的用户界面。
6 在此期间,父小部件可能会重建并请求树中的此位置更新,以显示具有相同runtimeType和widget.key的新小部件。当这种情况发生时,框架将更新widget属性以引用新的widget,然后使用前面的widget作为参数调用didUpdateWidget方法。状态对象应覆盖didUpdateWidget以响应其关联小部件中的更改(例如,启动隐式动画)。框架总是在调用didUpdateWidget后调用build,这意味着在didUpdateWidget中对setState的任何调用都是多余的。
7 在开发过程中,如果发生热重新加载(无论是通过按r从命令行Flutter工具启动,还是从IDE启动),则调用重新组装方法。这提供了重新初始化initState方法中准备的任何数据的机会。
8 如果包含State对象的子树从树中删除(例如,因为父级使用不同的runtimeType或widget.key构建了一个小部件),框架将调用deactivate方法。子类应重写此方法,以清除此对象与树中其他元素之间的任何链接(例如,如果您为祖先提供了指向后代RenderObject的指针)。
9 此时,框架可能会将此子树重新插入树的另一部分。如果发生这种情况,框架将确保调用build,以使State对象有机会适应其在树中的新位置。如果框架确实重新插入此子树,它将在从树中移除子树的动画帧结束之前执行此操作。因此,状态对象可以推迟释放大多数资源,直到框架调用它们的dispose方法
10 如果框架在当前动画帧结束时未重新插入此子树,则框架将调用dispose,这表示此状态对象将不再生成。子类应重写此方法以释放此对象保留的任何资源(例如,停止任何活动动画)。
11 在框架调用dispose之后,状态对象被视为已卸载,并且装载的属性为false。此时调用setState是一个错误。生命周期的这一阶段是终端:无法重新装载已处置的状态对象。

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:12:28  更:2021-09-27 14:14:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:46:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码