众所周知, flutter应用程序仅由小部件组成,这些小部件大致分为两种类型:
- 无状态小部件
- 有状态小部件
状态:
在了解无状态和有状态小部件之间的区别之前,我们应该先看看小部件状态的定义。
The State is information that can read synchronously when the widget is build and might change during thr lifetime of the widget.
简单来说,widget 的状态是其属性(参数)在其创建时(当widget 在屏幕上绘制时)所持有的对象的信息。状态也可以在使用时改变,例如 RaisedButton 小部件的颜色在按下时可能会改变。
无状态小部件:
无状态小部件是不会改变的小部件,即它们是不可变的。它的外观和属性在小部件的整个生命周期中保持不变。简而言之,无状态小部件在应用程序运行期间无法更改其状态,这意味着在应用程序运行时无法重绘小部件。
示例: Icon、IconButton 和 Text 是无状态小部件的示例。
要创建无状态小部件,我们必须覆盖下面代码中实现的 build() 方法。
Dart
import 'package:flutter/material.dart'
void main() = > runApp(GeeksforGeeks())
class GeeksforGeeks extends StatelessWidget {
@override Widget build(BuildContext context)
{return MaterialApp(
home: Scaffold(
backgroundColor: Colors.grey,
appBar: AppBar(backgroundColor: Colors.green,
title: Text("GeeksforGeeks"), ),
body: Container(child: Center(child: Text("Stateless Widget"),
),
),
),
)
}}
Dart
import 'package:flutter/material.dart'
void main() = > runApp(MyApp())
class MyApp extends StatelessWidget {
@override Widget build(BuildContext context)
{return MaterialApp(theme: ThemeData(
primarySwatch: Colors.green, ),
home: MyHomePage(title: 'GeeksforGeeks'),
)}}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}): super(key: key)
输出 :
有状态小部件:
有状态小部件是在运行时更改其属性的小部件。它们是动态的,即它们是可变的,并且可以在其生命周期内多次绘制。它可以响应用户交互触发的事件或接收数据时更改其外观。
示例: Checkbox、Radio Button、 Slider 、 InkWell 、Form 和TextField是有状态小部件的示例。
要创建有状态小部件,我们必须覆盖createState () 方法,该方法返回小部件的状态。
Dart
import 'package:flutter/material.dart'
void main() = > runApp(MyApp())
class MyApp extends StatelessWidget {
@override Widget build(BuildContext context)
{return MaterialApp(theme: ThemeData(
primarySwatch: Colors.green, ),
home: MyHomePage(title: 'GeeksforGeeks'),
)}}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}): super(key: key)
输出 :
无状态和有状态小部件之间的差异:
无状态小部件:
- 无状态小部件是静态小部件。
- 它们不依赖于任何数据更改或任何行为更改。
- Stateless Widgets 没有状态,它们会被渲染一次并且不会自我更新,只会在外部数据发生变化时更新。
- 例如:Text、Icon、 RaisedButton是无状态小部件。
有状态小部件:
- 有状态小部件是动态小部件。
- 它们可以在运行时根据用户操作或数据更改进行更新。
- 有状态的 Widget 有一个内部状态,如果输入数据发生变化或者 Widget 的状态发生变化,它可以重新渲染。
- 例如:复选框、单选按钮、滑块是有状态的小部件