我正在尝试理解example中的List
flutter_gallery。
我的方法是通过重构(my project)来简化``代码。
我看到this commit
发生了重大变化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);
源代码起始行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,
)),
);
}
我只能使用以下内容进行编译:
const Text t = const Text('we want a variable here');
。
我理解异常所说的内容,但想知道是否有办法将变量传递给Text()。
对Stackoverflow的搜索显示this,这与我的问题无关。
答案 0 :(得分:5)
Dart中的常量(即const
)是编译时,也就是说,它们无论如何都不能依赖于应用程序的运行时,并且只能是简单的副作用自由构造函数调用(即const
构造函数)或字符串,如字符串,数字和列表/映射。
例如, this 是一个编译时字符串:
const version = 'v1.0.0';
我可以在下面使用它:
const Text(version)
Dart也支持有限的表达式,作为编译时常量:
const Text('My version is: $version')
但是在您的示例中,text
不是编译时常量。
让我们通过一个名为showMyName
的简单例子来查看:
Widget showMyName(String name) => const Text(name);
这将得到与您所看到的相同的错误,因为我们尝试从运行时提供的值(参数{{1})创建编译时常量Text
})。当然,我们不需要 name
作为编译时常量。您只需使用Text
:
new
在未来版本的Dart(Widget showMyName(String name) => new Text(name);
)中,您可以省略--preview-dart-2
:
new