Flutter核心技术与实战 10 | Widget中的State究竟是什么?

StatefulWidget 应对有交互、须要动态变化视觉效果的场景,而 StatelessWidget 则用于处理静态的、无状态的视图展现。编程

UI 编程范式

Flutter 中,如何调整一个控件(Widget)的展现样式,即 UI 编程范式。浏览器

原生系统(Android、iOS)或原生 JavaScript话,视图开发是命令式的,须要精确地告诉操做系统或浏览器用何种方式去作事情。好比,若是咱们想要变动界面的某个文案,则须要找到具体的文本控件并调用它的控件方法命令,才能完成文字变动。less

与此不一样的是,Flutter 的视图开发是声明式的,其核心设计思想就是将视图和数据分离,这与 React 的设计思路彻底一致。和Android的MVVM相似,就是用数据驱动视图的变化。组件化

在 Flutter 中,Widget 采用由父到子、自顶向下的方式进行构建,父 Widget 控制着子 Widget 的显示样式,其样式配置由父 Widget 在构建时提供。性能

StatelessWidget和StatefulWidget

Widget 是不可变的,更新则意味着销毁 + 重建(build)。StatelessWidget 是静态的,一旦建立则无需更新;而对于 StatefulWidget 来讲,在 State 类中调用 setState 方法更新数据,会触发视图的销毁和重建,也将间接地触发其每一个子 Widget 的销毁和重建。优化

优化方案

基于上面的描述,咱们知道,StatelessWidget在性能上优于StatefulWidget,那么在构建一个复杂的Widget时,能够考虑组件化的方案,即将变化的和不变化的Widget单独处理,再封装在StatelessWidget中,这样只改变某个子组件,而不更改整个Widget。由于子Widget的setState并不会影响整个Widget。ui

相关文章
相关标签/搜索