在我的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
变成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
,则可以添加异常或其他错误处理。