flutter中state详解

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

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

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Txxq1QXj-1612666084611)(http://whysodiao.com/images/State LifeCycle.png)]

完整生命周期如下:

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

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

  • 调用initState;

  • 调用didChangeDependencies;

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

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

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

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

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

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

setState

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

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

  • 传入的为null;

  • 处在defunct阶段;

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

  • 参数返回一个Future对象。

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

_element.markNeedsBuild();

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

StatefulWidget和StatelessWidget

StatefulWidget和StatelessWidget如下所示

StatefulWidget和StatelessWidget

一个StatelessWidget可以用多个不同的BuildContext构建,而一个StatefulWidget会为每个BuildContext创建一个State对象。

StatelessWidget

对于StatelessWidget,build方法会在如下三种情况下调用,

  1. widget第一次被插入到树中;

  2. widget的父节点更改了配置(configuration);

  3. widget依赖的InheritedWidget改变了。

class GreenFrog extends StatelessWidget {

const GreenFrog({ Key key }) : super(key: key);

@override

Widget build(BuildContext context) {

return new Container(color: const Color(0xFF2DBD3A));

}

}

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
学习之门**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter开发实战详解PDF》是一本介绍如何使用Flutter进行实际开发的书籍。Flutter是由谷歌开发的一款跨平台框架,可以用来开发iOS、Android、Web和桌面应用程序。这本书涵盖了从Flutter基础知识到高级开发技巧的各个方面。 《Flutter开发实战详解PDF》首先介绍了Flutter的基本概念和工具,帮助读者快速入门。接着,书详细讲解了Flutter的布局和UI组件,包括文本、按钮、图片等常用控件的使用方法。读者可以通过学习这些内容,了解如何构建一个漂亮、流畅的用户界面。 在基础知识介绍之后,书通过实例介绍了如何进行网络请求、与后台进行数据交互。读者可以学习到如何使用Flutter的Http库来进行网络请求,并将获取到的数据展示在应用程序。此外,书还介绍了如何使用Flutter与数据库进行交互,以及如何处理用户输入和使用设备传感器。 《Flutter开发实战详解PDF》还提供了一些高级开发技巧和实践经验,例如如何进行状态管理、如何优化性能等。这些内容对于有一定Flutter开发经验的开发者来说尤为重要。 总的来说,这本书通过实例和案例的方式,详细讲解了Flutter的开发实践。无论是初学者还是有一定经验的开发者,都可以从学到很多实用的技巧和知识。如果你想深入学习Flutter的开发,这本书是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值