Проблема с возвращаемым значением из асинхронной функции Future - PullRequest
0 голосов
/ 21 мая 2019

Я создал функцию, которая получает JSON от API. Проблема в том, что функция не возвращает значение. Возвращает «Экземпляр будущего ...»

Я пробовал разные способы ее решения. Если я печатаю значение, которое должно быть возвращено (print (extractdata [1])), оно фактически возвращает то, что должно:

{
   id: 2
   name: Sala 2,
   beds: [
       {
           id: 3,
           name: Cama 3,
           paciente: null
       },
       {
           id: 4,
           name: Cama 4,
           paciente: null
       }
   ]
}

Future <List> getRoom() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var _token = prefs.getString('token');
    final response = await http.get('http://10.0.2.2:8000/api/room/',
    headers: {'Authorization':'JWT $_token'}
    ).then((res){
      var extractdata = JSON.jsonDecode(res.body);
      return extractdata;
    });
  }

Я ожидаю, что выводом будет список всех комнат, но вместо этого он возвращает «Экземпляр будущего ...». Если я пытаюсь получить длину, она работает, если я печатаю ее внутри функции, но если я вызываю функцию, а затем спрашиваю длину, она не работает.

1 Ответ

1 голос
/ 21 мая 2019

Поскольку вы используете async / await, вам не нужно использовать then.

Future <List> getRoom() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var _token = prefs.getString('token');

    final response = await http.get('http://10.0.2.2:8000/api/room/',
        headers: {'Authorization':'JWT $_token'}
    );

    var extractdata = JSON.jsonDecode(response.body);
    return extractdata;
}
...