gpt4 book ai didi

enums - Dart:从JavaScript var初始化枚举

转载 作者:行者123 更新时间:2023-12-03 03:28:42 25 4
gpt4 key购买 nike

在我的HTML文件中,我有:

<script>
var serverName = "dev.myapp.com:8080";
</script>

然后,在我的Dart代码中:

import "dart:js" as js;

String SERVER_NAME = js.context["serverName"];
String SIGNIN_PLACE_URL = "http://$SERVER_NAME/signin";
String SIGNOUT_PLACE_URL = "http://$SERVER_NAME/signout";

class Place {
static const SigninPlace = const Place._(SIGNIN_PLACE_FRAGMENT_URL);
static const SignoutPlace = const Place._(SIGNOUT_PLACE_FRAGMENT_URL);

static get values => [SigninPlace, SignoutPlace];

final String fragmentURL;

const Place._(this.fragmentURL);
}

关于两个值的 fragmentURL参数,我的“枚举”内部出现错误:

Arguments of a constant creation must be constant expressions



所以看起来我需要将这些 fragmentURL变成 const,但是不确定如何做。这里有什么解决方案?

最佳答案

由于SERVER_NAME在编译时未知,因此不能为常数。
如果您希望SigninPlace / SignoutPlace为常数SERVER_NAME也必须为常数。

可能的解决方法

class Place {
static String SERVER_NAME;

static final SigninPlace = const Place._("signin");
static final SignoutPlace = const Place._("signout");

static get values => [SigninPlace, SignoutPlace];

String get fragmentURL {
Map places = {
"signin": "http://${SERVER_NAME}/signin",
"signout" : "http://${SERVER_NAME}/signout" };
return places[_fragmentURL];
}
final String _fragmentURL;

const Place._(this._fragmentURL);
}

void main(List<String> args) {
Place.SERVER_NAME = "aServer";
print(Place.SigninPlace.fragmentURL);
}

如果将包含插值的字符串移动到函数(此处为getter)中,则插值将推迟到请求该值时为止。此时,您的 SERVER_NAME应该已经被分配了。
如果在设置 fragmentURL之前请求 SERVER_NAME,则可以添加异常或其他错误处理。

关于enums - Dart:从JavaScript var初始化枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20883650/

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