在Dart中,“ const”参数有什么区别?

时间:2018-10-24 13:01:42

标签: dart flutter

padding: const EdgeInsets.all(25.0)
padding: EdgeInsets.all(25.0),

在Dart演示中,大多数填充或孩子添加const,是否有任何优化?

https://docs.flutter.io/flutter/widgets/Padding-class.html

3 个答案:

答案 0 :(得分:3)

让我们考虑一下这三行代码:

1.const EdgeInsets.all(25.0)
2.const EdgeInsets.all(25.0)
3.const EdgeInsets.all(25.0)

1。在第一行,EdgeInsets类创建一个新对象,并为其左,上,右,下端分配其值,并渲染给定的小部件,然后,如果在另一个位置找到它,则创建一个具有相同值的常量对象以进行渲染。

2。  嘿,已经有一个具有此值的对象,因此只需渲染它即可。

3。  嘿,已经有一个具有此值的对象,因此只需渲染它即可。

现在,让我们考虑以下情况:

1.EdgeInsets.all(25.0)
2.EdgeInsets.all(25.0)
3.EdgeInsets.all(25.0)

1。  在第一行,EdgeInsets类创建一个新对象,并为它的left,top,right,bottom分配其值,并呈现给定的小部件。

2。  在第二行,EdgeInsets类创建一个新对象,并为其左,上,右,下分配其值,并呈现给定的小部件。

3。  在第三行,EdgeInsets类创建一个新对象,并为它的left,top,right,bottom分配其值,并呈现给定的小部件。

因此,通过使用const,我们可以减少每次重新创建和使用同一对象的时间,相反,我们创建一次对象,然后在需要时重新使用它。

答案 1 :(得分:0)

  

const意味着可以在编译时完全确定对象(此处的填充)的整个深度状态,并且填充将被冻结并且完全不可变。

PS:请阅读评论以获取更好的解释

答案 2 :(得分:0)

  

“ const”的含义在Dart中更加复杂和微妙。 const修改。您可以在创建集合时使用它,例如const [1、2、3],以及在构造对象(而不是new)时使用const Point(2,3)。在这里,const表示可以在编译时完全确定对象的整个深度状态,并且对象将被冻结并且完全不可变。

     

Const对象具有几个有趣的属性和限制:   它们必须由可在编译时计算的数据创建。 const对象无权访问在运行时需要计算的任何内容。 1 + 2是有效的const表达式,但新的DateTime.now()不是。   它们是深刻的,传递不变的。如果您有一个包含集合的最终字段,那么该集合仍然可以是可变的。如果您有const集合,则其中的所有内容也必须递归地为const。   它们被规范化。这有点像字符串实习:对于任何给定的const值,无论计算const表达式多少次,都将创建并重用单个const对象。换句话说:

Src here