Функция в Dart/Flutter

Вот функция:

getWeather(city, clientAPI) {
  return (http.get(Uri.parse('http://api.openweathermap.org/data/2.5/weather?q=$city&appid=${clientAPI}'))).then((value) => value.body);
}

Она возвращает Instance of 'Future', а мне нужно строку или словарь, или же JSON. Как это можно реализовать?


Ответы (1 шт):

Автор решения: MiT

http.get это асинхронная функция, следовательно она будет возвращать Future. Решить эту проблему можно так:

Future<Map<String, dynamic>> getWeather(String city, String clientAPI) async {
  var response = await http.get(Uri.parse('http://api.openweathermap.org/data/2.5/weather?q=$city&appid=${clientAPI}'));

  if (response.statusCode == 200) {
    Map<String, dynamic> jsonResponse =
        convert.jsonDecode(response.body) as Map<String, dynamic>;
   return jsonResponse;
  } else {
    throw Exception('Request failed with status: ${response.statusCode}.');
  }

  return body;
}

Замете что метод getWeather тоже стал асинхронным и возвращает Future<Map<String, dynamic>>, чтобы его использовать вам также придётся использовать async/await, либо then.


Как правильно использовать: Futures, Streams и Async/Await во Flutter?

→ Ссылка