Class 可选参数的默认值必须为常量颤振/省道
我试图在事件类中组织一些站点类数据,但是我得到了一个“可选参数的默认值必须是常量”,我已经为此挣扎了一段时间 我发现了这个:,但是我很难将这个例子的细节与我的代码联系起来 我的意图是使用Site类在Site构造函数中查找所有相关的Site数据(地址、电话等),然后将其作为自己的参数存储在Event类中。。。但我不确定最好的方法 代码如下:Class 可选参数的默认值必须为常量颤振/省道,class,flutter,dart,constructor,Class,Flutter,Dart,Constructor,我试图在事件类中组织一些站点类数据,但是我得到了一个“可选参数的默认值必须是常量”,我已经为此挣扎了一段时间 我发现了这个:,但是我很难将这个例子的细节与我的代码联系起来 我的意图是使用Site类在Site构造函数中查找所有相关的Site数据(地址、电话等),然后将其作为自己的参数存储在Event类中。。。但我不确定最好的方法 代码如下: class Event { // passed final TimeOfDay earliestTime; final DateTime star
class Event {
// passed
final TimeOfDay earliestTime;
final DateTime startTime;
final String siteName;
Site siteInfo;
Event(
{
@required this.earliestTime,
@required this.startTime,
@required this.siteName,
this.siteInfo = Site(siteName)} //<-- "Site(siteName) is underlined in red with the
// non_constant_default_value error
) { }
}
class Site {
String siteName;
Site(String siteName) {
this.siteName = "Site 1"; //<-- my attempt at a default value
int index = sites.indexOf(siteName);
phone = phones[index];
addressStreet = addressStreets[index];
}
String addressStreet;
String phone;
}
List<String> sites = [ // <-- Site lookup table
"Site 1",
"Site 2",
];
List<String> phones = [ // <-- use index to get values
"(312)857-5309",
"(773)857-5310",
];
List<String> addressStreets = [
"123 Bear St.",
"234 Elk St.",
];
类事件{
//通过
一天中的最后一个时间最早;
最终日期时间开始时间;
最终字符串siteName;
网站信息;
事件(
{
@需要这个。最早的时候,
@需要这个。开始时间,
@需要此名称。siteName,
this.siteInfo=Site(siteName)}/您不想将选项参数“=”设置为不需要,因此我会尝试此方法
class Event {
// passed
final TimeOfDay earliestTime;
final DateTime startTime;
final String siteName;
Site siteInfo;
Event(
{
@required this.earliestTime,
@required this.startTime,
@required this.siteName,
this.siteInfo, //<-- "Site(siteName) is underlined in red with the
} // non_constant_default_value error
);
}
事件({
@需要这个。最早的时候,
@需要这个。开始时间,
@需要此名称。siteName,
this.siteInfo=Site(siteName)
}) {}
您指定,如果某个对象构造了事件
对象,但忽略了siteInfo
参数,则事件
构造函数应将siteInfo
初始化为Site(siteName)
的默认值。但是,Dart要求默认参数值为编译时常量,并且Site>(siteName)
无法在编译时确定,因为它取决于siteName
通常,您可以将默认值设为null
,然后通过初始化列表对其进行初始化:
事件({
@需要这个。最早的时候,
@需要这个。开始时间,
@需要此名称。siteName,
站点信息
}):siteInfo=siteInfo??站点(siteName){}
或者在构造函数主体中
也就是说,我不清楚您是否真的希望Event
同时具有siteName
和siteInfo
参数。如果提供的siteName
与siteInfo.siteName
不同,可以吗?如果不是,那么Event
构造函数应该要求只向elimin提供一个参数避免任何不一致的可能性,例如:
事件({
@需要这个。最早的时候,
@需要这个。开始时间,
@需要此名称。siteName,
}):siteInfo=Site(siteName){}
或
事件({
@需要这个。最早的时候,
@需要这个。开始时间,
@需要此文件。siteInfo
}) {}
字符串get siteName=>siteInfo.siteName;
当然……创建类,然后插入。出于好奇……甚至可以在类中创建类吗?(就像我尝试的那样?)我上面打印的内容是可以接受的。因此,是的,您可以在另一个类中实例化一个类。太好了!感谢您对答案的更新。干杯!感谢您的解释。我很难理解为什么它不起作用。
class Foo {
String word;
Foo({this.word});
}
class Phoo {
Foo foo = Foo(word: 'A Word');
Phoo();
}
print(Phoo().foo.word);