1. 简介
在Flutter中,Widget是个非常基本的东西,我在上一章就说过,Flutter中只要是界面都是Widget,你可以把它就理解成是控件,但是又和Android的View控件不同的是,在Flutter中,包括Padding
、Align
、手势检测的GestureDetector
等等,都算是Widget
。
其实大多数时候,你就可以把Widget直接理解成UI控件就行了,因为Padding
、Align
、GestureDetector
等等也都是为UI服务的,你就可以理解成Flutter中只要与UI有关的属性都可以算是控件。
2. Widget的状态
在Android中,我们可以直接通过更新数据来达到刷新UI的目的。但是如果使用Flutter,就像我们前面说的计数器的Demo,如果直接通过StatelessWidget
也就是无状态Widget的话,是没法进行刷新UI的,只能写一个死界面,也就是说如果在Flutter中界面写出来的就是一个死界面,只有通过刷新状态才能更新UI。
Widget有两个直接子类:StatelessWidget
和StatefulWidget
:
StatelessWidget
:这个是无状态Widget,实现build()
方法后,就不可再变化,哪怕他的状态改变了。这句话可能有点矛盾,但是我来举个例子,比方说现在有一个StatelessWidget
,他的内容就是一个Text
,而这个Text
的内容则显示了counter
这个变量。当这个页面出现的时候,取了当时counter
的值并显示了出来,但是我们后续不管counter
这个值怎么改变,界面都是不会显示出来的。StatefulWidget
:这个是有状态Widget,当你有状态需要改变的时候就可以通过他来改变状态。
State的几种状态:
名称 | 状态 |
---|---|
initState | create之后被insert到渲染树时调用的,只会调用一次 |
didChangeDependencies | state依赖的对象发生变化时调用 |
didUpdateWidget | Widget状态改变时候调用,可能会调用多次 |
build | 构建Widget时调用 |
deactivate | 当移除渲染树的时调用 |
dispose | Widget即将销毁时调用 |
3. StatelessWidget
这个类相对简单,只需要实现build()
方法就可以了。
StatelessWidget
用于不需要维护状态的场景,也就是说如果他需要显示的某一个参数的值发生变化了他也不变。
class Test extends StatelessWidget {
Test({
Key key, this.title