flutter StatelessWidget 与 StatefulWidget的区别
flutter 中的 StatelessWidget
和 StatefulWidget
是两种常用的小部件类型,它们的主要区别在于是否有可变状态。
StatelessWidget
是不可变的小部件,它通常包含一些静态内容,例如文本、图像等。当我们需要创建一个简单的展示页面或者静态的 UI 组件时,可以使用 StatelessWidget
。
StatefulWidget
则是可变的小部件,它通常包含一些动态内容或交互逻辑,例如用户输入、网络请求等。当我们需要创建一个需要响应用户操作并且拥有动态内容的 UI 组件时,可以使用 StatefulWidget
。
另一个重要的区别是,StatefulWidget
除了定义小部件本身的代码外,还需要定义一个与之关联的状态类 State
。这个状态类实现了该小部件的实际逻辑,并维护了可变状态。当状态发生变化时,StatefulWidget
将会重建其对应的 State
对象,并重新构建其子树来反映这些变化。
例如,下面是一个简单的 StatelessWidget
示例:
class MyText extends StatelessWidget { final String text; MyText({this.text}); @override Widget build(BuildContext context) { return Text(text); } }
这里的 MyText
类是一个不带状态的小部件,只接受一个字符串参数作为显示的文本内容。在 build()
方法中,我们返回一个 Text
小部件来显示文本。
下面是一个简单的 StatefulWidget
示例:
class Counter extends StatefulWidget { @override _CounterState createState() => _CounterState(); } class _CounterState extends State<Counter> { int _count = 0; void _incrementCount() { setState(() { _count++; }); } @override Widget build(BuildContext context) { return Column( children: [ Text('Count: $_count'), RaisedButton( onPressed: _incrementCount, child: Text('Increment'), ), ], ); } }
这里的 Counter
类是一个带状态的小部件,它包含一个 _CounterState
状态类,用于维护一个计数器。在 _CounterState
中,我们定义了一个 _count
变量和一个 _incrementCount
方法来更新计数器,并使用 setState()
方法通知框架重建该小部件的子树以显示最新的计数器值。在 build()
方法中,我们返回一个包含计数器值和一个按钮的列,用户点击按钮时会调用 _incrementCount
方法并更新计数器。
总之,StatelessWidget
和 StatefulWidget
都是非常有用的 Flutter 小部件类型,开发者可以根据需要选择适当的类型来实现自己的 UI 组件。