【问题标题】:Flutter variable with const keyword [duplicate]带有 const 关键字的颤振变量[重复]
【发布时间】:2019-01-05 15:44:34
【问题描述】:

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

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

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

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

我不认为这是重复的,因为这篇文章中的答案完美地解释了我的问题,而在另一篇文章中没有找到,更不用说另一篇文章是使用谷歌时没人会找到的两部分问题。

【问题讨论】:

标签: dart flutter


【解决方案1】:

来自飞镖新闻网站:

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

Read more here.

用我的话来说,您可以使用const 构造函数(定义为const 的构造函数),例如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

【讨论】:

  • 我刚刚找到了这个问题的最佳解释HERE
  • 这很烦人。例如,在 Flutter 中,像 PopupMenuButton 这样的类因此编辑起来很痛苦。
【解决方案2】:

这是另一个问题,其中一些答案可能会有所帮助。

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

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

【讨论】:

  • 考虑标记为重复而不是这样的答案
  • 另外,带有小部件的const 具有特定于小部件的不同行为(颜色没有)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 2014-08-13
    • 2013-02-15
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2017-03-28
    • 2019-09-10
    • 2013-08-06
    相关资源
    最近更新 更多