在我的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
个参数的错误:
常量创建的参数必须是常量表达式
所以看起来我需要制作这些fragmentURL
s const
,但不知道怎么做。这里有什么解决方案?
答案 0 :(得分:1)
由于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
,您可以添加例外或不同的错误处理。