Как я могу получить доступ к результату ответа HttpRequest в Dart?
После многих попыток получить содержимое ответа в HttpRequest мне не удалось полностью понять или понять, почему я не могу получить то, что хочу, и должен упомянуть, что могу регистрировать и манипулировать ответом только внутри onReadyStateChange (onLoad и onLoadEnd). дают те же результаты!), но я действительно хочу, чтобы это значение было за пределами обратного вызова.
Вот часть кода, с которой я застрял
Map responsData;
req=new HttpRequest()
..open(method,url)
..send(infojson);
req.onReadyStateChange.listen((ProgressEvent e){
if (req.readyState == HttpRequest.DONE ){
if(req.status == 200){
responsData = {'data': req.responseText};
print("data receaved: ${ req.responseText}");
//will log {"data":mydata}
}
if(req.status == 0){
responsData = {'data':'No server'};
print(responsData );
//will log {"data":No server}
}
}
});
//anything here to get responsData won't work
1 ответ
Решение
Вы должны назначить обратный вызов onLoad, прежде чем позвонить отправить. Я не уверен, что вы имеете в виду только внутри onReadyStateChange. Может быть, вы хотите присвоить responseText переменной за пределами обратного вызова.
Создать метод:
Future<String> send(String method, String url, String infojson) {
var completer = new Completer<String>();
// var result;
req=new HttpRequest()
..open(method,url)
..onLoad.listen((event) {
//print('Request complete ${event.target.reponseText}'))
// result = event.target.responseText;
completer.complete(event.target.responseText);
})
..send(infojson);
return completer.future;
}
и назвать этот метод как
var result;
send(method, url).then(
(e) {
// result = e;
print('Request complete ${e}'));
});