查看类里面的方法  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对象时,会调用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()方法里面 
@overridevoid initState() {  super.initState();  new Future.delayed(const Duration(seconds: 2), () {    //延时操作后,实现跳转逻辑    return true;  });}

 


 

更多相关文章

  1. Android横向滑动加载更多的控件的实现---HorizontalScrollSlideV
  2. Android(安卓)Context 是什么?
  3. 通过Android(安卓)Binder拓展系统服务
  4. Android中第五大组件详解
  5. android (三)、Activity工作原理
  6. Android(安卓)屏幕旋转重新调用onCreate
  7. Android的异步(Thread、Handler、AsyncTask)
  8. [Android] Android中将一个图片切割成多个图片
  9. Android(安卓)快速开发系列 ORMLite 框架最佳实践

随机推荐

  1. 简单了解SQL常用删除语句原理区别
  2. MySQL死锁检查处理的正常方法
  3. MySQL查看与修改字符集的方法实例教程
  4. mysql对于模糊查询like的一些汇总
  5. MySQL 数据库 like 语句通配符模糊查询小
  6. 关于MySQL绕过授予information_schema中
  7. Mysql索引常见问题汇总
  8. node连接mysql数据库遇到的问题和解决方
  9. shell脚本一键安装MySQL5.7.29的方法
  10. MySQL基于group_concat()函数合并多行数