我正在使用飞镖编写移动游戏。我的level-config存储为json。通过httpRequest
我从服务器获取JSON,然后解析我的json。它应该创建一个Level-Object。我想在我的模型中使用它。但我无法将其分配到模型(model.level)
中的关卡参考。在HttpRequest
之后,它的值仍然相同(null
)。我的想法也是使用一些回调艺术,但我不知道如何......
static void load(final int levelNr, Game model) {
final String path = "../json/$levelNr.json";
HttpRequest.getString(path).then((lvlJson) {
Map data = JSON.decode(lvlJson);
Level level = _levelFromMap(data);
model.level = level;
});
}
答案 0 :(得分:1)
您可以使用callback
或async await
<强> 1。回调强>
static void load(final int levelNr, void callbackFunction(Level level)) {
final String path = "../json/$levelNr.json";
HttpRequest.getString(path).then((lvlJson) {
Map data = JSON.decode(lvlJson);
Level level = _levelFromMap(data);
callbackFunction(level);
});
}
用法:
load(levelNrValue, (level) {
model.level = level;
//refresh view or data to reflect the change in model.
})
<强> 2。异步并等待
static Future<Level> load(final int levelNr) async {
final String path = "../json/$levelNr.json";
final response = await HttpRequest.getString(path);
Map data = JSON.decode(lvlJson);
return _levelFromMap(data);
}
用法:
1)在主叫地点使用回调:
load(levelNrValue).then((level) {
model.level = level;
//refresh view or data to reflect the change in model.
});
2)在呼叫场所使用async:
final level = await load(levelNrValue);
model.level = level;
注意:以上两行应该在一些异步方法中。
void loadDate(int levelNrValue, Game model) async {
final level = await load(levelNrValue);
model.level = level;
//refresh view or data to reflect the change in model.
}
答案 1 :(得分:0)
也许请求正在完成一个可能没有被注意到的错误。
尝试添加catchError
:
static void load(final int levelNr, Game model) {
final String path = "../json/$levelNr.json";
HttpRequest.getString(path).then((lvlJson) {
Map data = JSON.decode(lvlJson);
Level level = _levelFromMap(data);
model.level = level;
})
.catchError((Error error) {
print(error.toString());
});;
}