如何获得HttpRequest的结果?

时间:2018-06-09 22:35:39

标签: asynchronous dart

我正在使用飞镖编写移动游戏。我的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;
    });
  }

2 个答案:

答案 0 :(得分:1)

您可以使用callbackasync 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());
    });;
 }