我注意到可以在Dart中创建一个const构造函数.在文档中,它表示该const单词用于表示编译时间常量.
我想知道当我使用const构造函数创建对象时会发生什么.这是一个永远相同且在编译时可用的不可变对象吗?const构造函数的概念实际上如何工作?const构造函数与"常规"构造函数有何不同?
在Flutter文档的“编写您的第一个应用程序”教程中,步骤4名为“步骤4:创建无限滚动ListView”,要求您创建2个变量,显示在此处:
class RandomWordsState extends State<RandomWords> {
final _suggestions = <WordPair>[];
final _biggerFont = const TextStyle(fontSize: 18.0);
...
}
Run Code Online (Sandbox Code Playgroud)
为什么const在第三行使用关键字?我来自C#和JavaScript背景,我不习惯在赋值语句的右侧看到它。我注意到,如果将其删除,它仍然可以按预期工作。您能以拉面语来解释为什么要使用它,什么时候应该这样做?我猜想这太过分了,我不必使用它,但我只是想确定一下。
我不认为这是重复的,因为这篇文章中的答案非常适合解释我的问题,而在另一篇文章中找不到,更不用说另一篇文章是两部分的问题,使用Google时没人会找到。
[dart]无效的常量值.[dart]常量创建的参数必须是常量表达式.
我想制作DropdownButton,但errorText只接受常量变量.
[dart] Invalid constant value. [dart] Arguments of a constant creation must be constant expressions.
常量变量意味着我不能用其他文本替换.
也许还有其他任何方式来进行DropdownButton验证吗?
String errorGender = null;
var _inputGender = InputDecorator(
decoration: const InputDecoration(labelText: 'Gender', errorText: errorGender),
isEmpty: data['gender'] == null,
child: DropdownButtonHideUnderline(
child: ButtonTheme(
alignedDropdown: true,
child: DropdownButton(
isDense: true,
value: data['gender'],
onChanged: (value) => setState(() => data['gender'] = value),
items: _gender.map((value) {
return DropdownMenuItem(
value: value,
child: Text(value[0].toUpperCase() + value.substring(1)),
);
}).toList()
)
)
)
);Run Code Online (Sandbox Code Playgroud) 在使用 flutter 开发应用程序时,我想定义一些常见的样式。
\n\n代码如下:
\n\nimport 'package:flutter/material.dart';\nclass AppStyle {\n static Color colorRed = const Color(0xffe04f5f);\n static Color colorWhite = const Color(0xffffffff);\n static Color colorGreen = const Color(0xff1abc9c);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n现在,我想定义一种新的风格。
\n\nstatic TextStyle listRowTitle = const TextStyle(fontSize: 20.0, color: colorGreen);\nRun Code Online (Sandbox Code Playgroud)\n\n如果你写成上面的,那么colorGreen这里就会出现问题。错误的信息是
\n\n[dart] Invalid constant value.\n[dart] Arguments of a constant creation must be constant expressions.\nColor colorGreen\nRun Code Online (Sandbox Code Playgroud)\n\n如果把colorGreen改为Color(0xff1abc9c)就没有问题了!
\n\nstatic TextStyle listRowTitle = const TextStyle(fontSize: 20.0, color: Color(0xff1abc9c));\nRun Code Online (Sandbox Code Playgroud)\n\n请教我\xef\xbc\x8cplease!
\n