简介
- Flutter的一些组件我们用了三天左右有了部分了解,在日后的工作学习中使用到了,我们可以再进行深入了解。平时我们呢使用的数据是动态的,所以我们在了解组件的同时,我们还需要对状态管理机制有一些了解
Widget唯一标识
- 在Flutter中,每个Widget都有一个唯一标识key,它在FrameWork层创建和渲染时生成,可以通过 GlobalKey、LocalKey、UniqueKey和ObjectKey对Widget的key进行保存
InheritedWidget
- 它是一个被定义为父节点的Widget,其暴露出来的数据,可以高效的在Widget树从上到下传递和共享,同时支持跨级数据传递
Widget树
- Widget之间存在的嵌套层级形成了Widget树,Widget只是描述Element的数据配置,真正在屏幕上呈现给用户的UI是Element
Context
- Context对应Widget中具体某一个Widget的位置引用,父Widget的Context包含子Widget的Context,通过Context可以便利和查找当前Widget树,Context之间也是关联在在一起的,他们也可以组成和Widget树类似的Context树
StatelessWidget
- StatelessWidget即无状态的Widget,它无法通过setState设置组件状态进行重绘,它内的属性应该被声明为final,防止改变
生命周期
初始化->build进行渲染
StatefulWidget
- StatefulWidget是有状态的Widget,创建一个StatefulWidget组件时,它同时创建一个State对象,通过与State关联可以达到刷新UI的目的
组成:
- 主体部分:
- 第二部分
State
- 在Flutter中,Widget和State具有不同的生命周期: Widget是临时对象,用于构建当前状态下的应用程序,而State对象在多次调用build()之间保持不变,允许它们保存信息(状态)
State生命周期
- 首次启动界面:
- initState -> didChangeDependencies -> build
- 首次启动后点击热重载
- reassemble -> didUpdateWidget -> build
- 退出界面
- deactivate -> dispose
- A跳转至其他页面B
- B : initState -> didChangeDependencies -> build
- A: deactivate -> build
initState
- initState是State生命周期中第一个被执行的方法,且在生命周期中只会被执行一次, 注意此时FrameWork层还未把Context和State关联在一起,不可访问Context
didChangeDeoendencies
- 该方法在执行完initState后被执行,此时可以访问Context
build
- build方法在didChangeDependencies和didUpdateWidget之后被执行,每当界面重绘调用setState的时候都会被执行
dispose
- 该方法在组件被销毁的时候调用