介绍
在本文中,我将向您展示Stateful和Stateless Widget之间的区别。
正如您在Flutter中所知,所有UI组件都称为小部件。包含应用程序单个屏幕代码的小部件可以只有两种类型 -
- Stateful(有状态)
- Stateless(无状态)
我们来讨论它们有何区别。
Stateless(无状态)
无状态小部件不需要可变状态,即它是不可变的。
简单来说,无状态小部件无法在应用程序运行时更改其状态,这意味着在应用程序运行时无法重新绘制小部件。
Stateless小部件的结构如下所示:
image.png所以,让我们了解这个小代码片段中的内容。
这个无状态窗口小部件的名称是“ StartScreen ”,我们必须在其中覆盖“ build”方法。此构建方法接受“ BuildContext ”作为参数并返回小部件。这就是为什么你可以看到构建方法的返回类型是一个小部件。这是您可以设计此屏幕的UI的地方,这是无状态的。
在Stateless小部件中,“ build ”方法只能在应用程序运行时调用一次,它负责将小部件绘制到设备屏幕上。
如果要重绘无状态窗口小部件,则需要创建窗口小部件的新实例。
提示:您可以使用快捷方式“ stl ” 在VS Code或Android Studio中快速构建无状态窗口小部件。
无状态小部件的一些示例如下:
现在,让我们转到Stateful Widget(有状态)。
有状态
有状态小部件具有可变状态,即它们是可变的并且可以在其生命周期内被多次绘制。
它们是可以多次更改其状态的小部件,可以在应用程序运行时重新绘制到屏幕上任意次。
Stateful小部件的结构如下所示:
窗口小部件的名称再次是“ StartScreen ”,但现在它覆盖了“ createState ”方法,而不是“ build ”方法,后者返回类“ _StartScreenState ” 的实例。
类“ _StartScreenState ”从State <>扩展,它以“ StartScreen ”作为模板输入。
现在,这个“ _StartScreenState ”会覆盖“ build ”方法并返回一个小部件。您可以在此处定义应用程序的UI,即有状态。由于它是一个有状态的小部件,您可以多次调用构建方法,这将重绘屏幕上的小部件。
那么,你怎么能调用构建方法呢?
这很简单,您可以使用“ setState ”方法调用构建方法,然后重新构建窗口小部件。这是您需要与任何有状态窗口小部件一起使用的最重要方法,才能真正使用窗口小部件的有状态。
提示:您可以使用快捷方式“stf”在VS Code或Android Studio中快速构建状态窗口小部件。
有状态小部件的一些示例如下:
结论
我们已经结束了这篇短文。我希望你们都已经收到了有状态和无状态小部件的基本概念,以及它们之间的区别。如果您自己做一些项目并了解应用程序如何处理状态,这些概念会更加清晰。
网友评论