我是新的Flutter和困惑与它的建设者。
举例来说:
- 样品1:
class MyContainer extends StatelessWidget {
final Color color;
const MyContainer({Key key, this.color}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
color: color,
);
}
}
字符串
- 样品2:
class MyContainer extends StatelessWidget {
final Color color;
MyContainer({this.color});
@override
Widget build(BuildContext context) {
return Container(
color: color,
);
}
}
型
我删除了样本2中的const
和key
,样本1和样本2都工作得很好。
样本2是否存在潜在风险?
4条答案
按热度按时间jhkqcmku1#
当您不希望重新构建此小部件时,可以使用const构造函数。常量小部件就像常量pi,它不会改变。但是,如果你有state,你想使用示例2中的普通构造函数,因为小部件会改变,不能保持不变。
因此,当你在有意义的地方使用const时,你会得到轻微的性能提升(因为它不会被重建)。
key属性是另一个主题。
kyxcudwk2#
const
关键字的变量在compile-time
处初始化,并且在runtime
处已经赋值。class
中定义const
。但是你可以在一个function
。const
不能在运行时更改。Use const: If you are sure that a value isn’t going to be changed when running your code. For example, when you declare a sentence that always remains the same.
pinkon5k3#
当你在constructor中使用const时,它是编译时常量,并且constructor中给出的所有值都必须是常量,
试着给const构造器一个非常量值来看看区别
fcg9iug34#
您可以在本地环境中运行代码片段,但首先需要导入
benchmark_harness
,您不会发现太大的差异,但它将提高flutter创建部件和const无状态部件的元素时的性能,因为它不会在重建或动画时再次创建元素,这是内存密集型的字符串
产出:
的数据