flutter state

查看类里面的方法  ctrl  + F12

1.0 State

在说到StatefulWidget之前,先说下State。State的作用有两点:

  1. 在widget构建的时候可以被同步读取;

  2. 在widget的生命周期中可能会被改变。

1.1 State生命周期

State的生命周期有四种状态:

  • created:当State对象被创建时候,State.initState方法会被调用;

  • initialized:当State对象被创建,但还没有准备构建时,State.didChangeDependencies在这个时候会被调用;

  • ready:State对象已经准备好了构建,State.dispose没有被调用的时候;

  • defunct:State.dispose被调用后,State对象不能够被构建。

 

State LifeCycle

 

 

完整生命周期如下:

  • 创建一个State对象时,会调用StatefulWidget.createState;

  • 和一个BuildContext相关联,可以认为被加载了(mounted);

  • 调用initState;

  • 调用didChangeDependencies;

  • 经过上述步骤,State对象被完全的初始化了,调用build;

  • 如果有需要,会调用didUpdateWidget;

  • 如果处在开发模式,热加载会调用reassemble;

  • 如果它的子树(subtree)包含需要被移除的State对象,会调用deactivate;

  • 调用dispose,State对象以后都不会被构建;

  • 当调用了dispose,State对象处于未加载(unmounted),已经被dispose的State对象没有办法被重新加载(remount)。

1.2 setState

State中比较重要的一个方法是setState,当修改状态时,widget会被更新。比方说点击CheckBox,会出现选中和非选中状态之间的切换,就是通过修改状态来达到的。

查看setState源码,在一些异常的情况下将会抛出异常:

  • 传入的为null;

  • 处在defunct阶段;

  • created阶段还没有被加载(mounted);

  • 参数返回一个Future对象。

检查完一系列异常后,最后调用代码如下:

_element.markNeedsBuild();

markNeedsBuild内部,则是通过标记element为diry,在下一帧的时候重建(rebuild)。可以看出setState并不是立即生效,它只是将widget进行了标记,真正的rebuild操作,则是等到下一帧的时候才会去进行。

 

了解了state的生命周期,以后就可以方便的写操作了。
 

比如如果是欢迎页,那么欢迎页的延时跳转逻辑就可以写到

initState()方法里面 
@override
void initState() {
  super.initState();
  new Future.delayed(const Duration(seconds: 2), () {
    //延时操作后,实现跳转逻辑
    return true;
  });
}

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值