Jef*_*iao 2 const dart flutter
我想了解的List 例子中flutter_gallery。我的方法是通过重构为(我的项目)来简化代码。
我看到此提交中的重大更改
I/flutter (14712): 'file:///Users/hong/Flutter/github/flutter_gallery_material_list/lib/main.dart': error: line 54:
I/flutter (14712): expression is not a valid compile-time constant
I/flutter (14712): const Text t = const Text(text);
Run Code Online (Sandbox Code Playgroud)
源代码起始行53是:
MergeSemantics _mergeSemanticsOf(String text, _MaterialListType listType) {
const Text t = const Text(text);
//const Text t = const Text('we want a variable here');
return new MergeSemantics(
child: new ListTile(
dense: true,
title: t,
trailing: new Radio<_MaterialListType>(
value: listType,
groupValue: _itemType,
onChanged: changeItemType,
)),
);
}
Run Code Online (Sandbox Code Playgroud)
我只能使用以下代码进行编译:
const Text t = const Text('we want a variable here');。
我理解异常的含义,但是想知道是否有一种方法可以将变量传递给Text()。
在Stackoverflow上进行的搜索显示了,这与我的问题无关。
constDart中的常量(即)是编译时的,也就是说,它们无论如何都不能依赖于应用程序的运行时,并且只能是简单的无副作用的构造函数调用(即const构造函数)或诸如字符串,数字和列表/地图。
例如,这是一个编译时字符串:
const version = 'v1.0.0';
Run Code Online (Sandbox Code Playgroud)
我可以在下面使用它:
const Text(version)
Run Code Online (Sandbox Code Playgroud)
Dart还支持有限的表达式以及编译时常量:
const Text('My version is: $version')
Run Code Online (Sandbox Code Playgroud)
但是,在您的示例中,text不是一个编译时常量。
让我们通过一个更简单的示例进行查看showMyName:
Widget showMyName(String name) => const Text(name);
Run Code Online (Sandbox Code Playgroud)
这将产生与您看到的错误相同的错误,因为我们试图从运行时提供的值(参数)创建一个编译时常Text量name。当然,我们不需要 Text是编译时常量。您可以简单地使用new:
Widget showMyName(String name) => new Text(name);
Run Code Online (Sandbox Code Playgroud)
在Dart的未来版本中(带有--preview-dart-2),您可以省略new:
Widget showMyName(String name) => Text(name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2276 次 |
| 最近记录: |