Flutter 视图之 Widget、State类

Widget 按照状态分为两类

StatefullWidget 和 StatelessWidget

  • StatelessWidget :无中间状态变化的 widget,需要更新展示内容的话,就得通过重新 new, flutter 推荐尽量使用的 Widget

  • StatefullWidget :存在中间状态变化的 Widget,但是 疑问 来了,Widget 被设计成都是 immutable(无状态的),那么状态变化存储在哪里呢?
    flutter 引入了 state 的类用于存放中间状态,通过调用 state.setState() 进行此节点及以下的整个子树更新。

那么接下来,了解一下 State(状态)的生命周期

 

state 生命周期

依次来熟悉一下吧:

  • 1、initState():state create 之后被插入到树中时调用
  • 2、didUpdateWidget(newWidget):祖先节点重建widget 时调用
  • 3、deactivate()widget 被移除的时候调用,一个 widget 从 树中移除掉,可以在 dispose 接口被调用前,重新插入到一个新的树中
  • 4、didChangeDependencies()
    * 初始化时,在 initState() 之后立即调用
    * 当依赖的 InheritedWidget rebuild,会触发此接口被调用
  • 5、build()
    * 在 initState()之后调用
    * 在 didUpdateWidget 之后调用
    * 接收到 setState()后调用
    * 当接受到级联关系的控件状态变化时调用
    * 当调用 deactivate 并且又重新插入到一个新的树时,调用
  • 6、dispose():widget 彻底销毁时调用
  • 7、reassemble():hot reload(热加载)的时候调用

需要注意

  • 当 ListView 中的item 滚动出可现实区域时,item 会被从树中remove掉,此item子树中的所有 state 都会被 dispose,state 记录的数据都会销毁,item 滚动回可显示区域时,会重新创建全新的 state、element、renderebject

  • 使用热加载时,会有没有更新的现象,这种现象本质是 state 实例没有重新创建,如果该 state 中存在复杂的资源更新,那么需要重新加载才能生效。
    这个时候需要在 reassemble() 添加处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值