flutter StatelessWidget 与 StatefulWidget的区别

flutter 中的 StatelessWidgetStatefulWidget 是两种常用的小部件类型,它们的主要区别在于是否有可变状态。

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 方法并更新计数器。

总之,StatelessWidgetStatefulWidget 都是非常有用的 Flutter 小部件类型,开发者可以根据需要选择适当的类型来实现自己的 UI 组件。

 

posted @ 2023-04-25 17:06  小小强学习网  阅读(83)  评论(0编辑  收藏  举报