StatefulWidget 和 StatelessWidget 的区别

  • 如何更新 Widget

在 Android 中可以直接通过 View 来更新它们的状态。但是在 Flutter 中 Widget 是不可变的,所以不能直接通过 Widget 进行更新,如果需要更新 Widget 必须通过 State。

这里就引出了 StatefulWidget 和 StatelessWidget 两个部件。从字面理解,StatelessWidget 是没有内部状态的即不可变。而 StatefulWidget 具有状态,即是可刷新的。

当你构建的 UI 元素中有些部分是不变的,那么使用 StatelessWidget 是一个不错的选择。

例如在 Android 中你通常会将 App 的 logo 通过 ImageView 显示。而 logo 一般不会变,因此对应 Flutter 中你就可以使用 StatelessWidget 来显示你的 logo。

如果你想通过 HTTP 请求后获得的数据或用户交互来刷新 UI ,此时就需要使用 StatefulWidget 然后主动告诉 Flutter 底层 Widget 的状态发生了变化,只有如此 Flutter 才会刷新对应的 Widget。

这里有重要的一点需要注意,StatelessWidget 和 StatefulWidget 的核心内容是一致的,它们都会在每一帧中被重构,不同之处在于 StatefulWidget 有一个 State 对象,它可以为 StatefulWidget 在不同帧之间存储数据。

如果你还是有疑惑的话,只要记住如果一个 Widget 会变化,那么它就是有状态的。但是如果一个子 Widget 是有状态的,但是其父 Widget 是不可变的话父 Widget 也可以是 StatelessWidget 。

StatelessWidget 和 StatefulWidget的区别

StatelessWidget是状态不可变的widget。初始状态设置以后就不可再变化。如果需要变化需要重新创建。StatefulWidget可以保存自己的状态。那问题是既然widget都是immutable的,怎么保存状态?其实Flutter是通过引入了State来保存状态。当State的状态改变时,能重新构建本节点以及孩子的Widget树来进行UI变化。注意:如果需要主动改变State的状态,需要通过setState()方法进行触发,单纯改变数据是不会引发UI改变的。

你可能感兴趣的:(StatefulWidget 和 StatelessWidget 的区别)