包含const关键字的Flutter变量

时间:2018-07-29 00:10:30

标签: dart flutter

在Flutter文档的“编写您的第一个应用程序”教程的第4步中,名为“第4步:创建无限滚动ListView”,要求您创建2个变量,显示在此处:

class RandomWordsState extends State<RandomWords> {
  final _suggestions = <WordPair>[];

  final _biggerFont = const TextStyle(fontSize: 18.0);
  ...
}

为什么在第三行中使用const关键字?我来自C#和JavaScript背景,我不习惯在赋值语句的右侧看到它。我注意到,如果将其删除,它仍然可以按预期工作。您能否以细语解释,为什么要使用它,我什么时候应该这样做?我猜想这太过分了,我不必使用它,但我只是想确定一下。

我不认为这是重复的,因为此帖子中的答案非常适合解释我的问题,而在其他帖子中找不到,更不用说其他帖子是两部分的问题,使用Google时没人会找到。

3 个答案:

答案 0 :(得分:9)

来自dart新闻网站:

  

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

Read more here.

用我的话说,您可以使用constconst之类的const Text()构造函数(定义为new Text()的构造函数)。

如果您使用const Text():这只会分配一个内存空间,而当您添加另一个const Text()时,它将重用相同的对象,但是new Text()将始终分配新的内存空间。因此,使用const可以提高程序性能(不是那么多的性能,而是更少的内存分配)。另外,如果需要重用,则可以将类构造函数定义为const

  

我注意到,如果将其删除,它仍然可以按预期工作。

这是因为在创建对象/实例时,使用Dart可以使用两个newconst关键字,因此Dart VM可以处理。最初存在一些问题,但现在已解决。

即使您避免使用const / new,它们也会被Dart VM添加。将这两个关键字设置为可选的原因是在Flutter中,您必须在任何地方键入这两个关键字(例如,在小部件树中)。

Dart two enhancement() Feb 23

答案 1 :(得分:2)

这是另一个可能会有所帮助的问题。

What color system does flutter use and why do we use `const Color` instead of `new Color`

  

正如公认的答案所解释的,const构造函数是一个小的优化。   在dart中,即使调用数百次,const MyObject(42)也只会分配一次。这意味着更少的内存分配>更快

答案 2 :(得分:1)

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