小部件的“ const”是否应该仅在有状态小部件中使用?

时间:2019-11-30 07:15:10

标签: flutter dart

很明显,在StatefulWidget中,如果状态更改,则const Text('...')将不会重建。

class _SomeWidgetState extends State<SomeWidget> {
  @override
  Widget build(BuildContext context) {
    return const Text('Some Static Text'); // doesn't rebuild
  }
}

但是,我的问题是:在const中使用StatelessWidget有什么好处吗?

class ListItem extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const Text('Some Static Text') // Is `const` useful here?
  }
}

1 个答案:

答案 0 :(得分:5)

是的,这很有用。

内部的常量构造函数对所有类型的窗口小部件都非常有用,包括StatelessWidget和其他较不常见的窗口小部件,例如InheritedWidget或RenderObjectWidget。

请记住,所有小部件都可能带有参数,因此您可能需要:

class MyStateless extends StatelessWidget {
  const MyStateless({Key key, this.count}): super(key: key);

  final int count;

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Text('$count'),
        const Text('static text'),
      ],
    );
  }
}

在这种情况下,您的无状态小部件可能会使用不同的参数进行重建,例如:

MyStateless(count: 0);

收件人:

MyStateless(count: 42);

在这种情况下,使用const Text('static text')不会导致重新生成此文本。