gpt4 book ai didi

class - 可选参数的默认值必须是常量 flutter/dart

转载 作者:行者123 更新时间:2023-12-03 03:15:09 26 4
gpt4 key购买 nike

我正在尝试在 Event 类中组织一些 Site 类数据,但是我收到“可选参数的默认值必须是常量”的消息,并且我已经为此苦苦挣扎了一段时间。

我发现了这个:Default values of an optional parameter must be constant ,但我很难将该示例的细节与我的代码联系起来。

我的意图是使用 Site 类在 Site 构造函数中查找所有相关的站点数据(地址、电话等),然后将其存储在 Event 类中作为它自己的参数......但我不是当然是最好的方法来做到这一点。

这是代码:

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.",
];

简而言之,错误是什么,我如何才能使用 Site 类作为在 Event 类中保存所有站点数据的方法?

最佳答案

  Event({
@required this.earliestTime,
@required this.startTime,
@required this.siteName,
this.siteInfo = Site(siteName)
}) {}


您指定的是如果某物构造了 Event对象但省略了 siteInfo参数, Event构造函数应该初始化 siteInfo到默认值 Site(siteName) .但是,Dart 要求默认参数值是编译时常量,并且 Site(siteName)无法在编译时确定,因为它取决于 siteName .

一般来说,你可以让默认值是 null并稍后通过初始化列表对其进行初始化:

  Event({
@required this.earliestTime,
@required this.startTime,
@required this.siteName,
Site siteInfo
}) : siteInfo = siteInfo ?? Site(siteName) {}

或在构造函数体内。

也就是说,我不清楚您是否真的想要 Event两者都要 siteNamesiteInfo参数。如果提供可以吗 siteName不同于 siteInfo.siteName ?如果没有,那么 Event构造函数应该要求只提供一个来消除任何不一致的可能性,例如:

  Event({
@required this.earliestTime,
@required this.startTime,
@required this.siteName,
}) : siteInfo = Site(siteName) {}

或者

  Event({
@required this.earliestTime,
@required this.startTime,
@required this.siteInfo
}) {}

String get siteName => siteInfo.siteName;

关于class - 可选参数的默认值必须是常量 flutter/dart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61262780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com