Как получить результат HttpRequest? - PullRequest
0 голосов
/ 10 июня 2018

Я пишу игру для мобильных, используя дартс.Мой уровень конфигурации хранится как JSON.Через httpRequest я получаю JSON с сервера, а затем анализирую свой JSON.Он должен создать объект уровня.Я хочу использовать это в моей модели.Но я не могу присвоить его эталонному уровню в моей модели (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 голосов
/ 10 июня 2018

Вы можете использовать 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.async и await

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) Использование асинхронногов месте вызова также:

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.
}
0 голосов
/ 10 июня 2018

Возможно, запрос завершается с ошибкой, которая может быть не замечена.Попробуйте добавить 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());
    });;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...