List<String> getData() async {
var response = await http.get(url);
if (response.statusCode == 200) {
String data = response.body;
print(data);
var temperature = jsonDecode(data)['main']['temp'];
var condition = jsonDecode(data)['weather'][0]['id'];
var city_name = jsonDecode(data)['name'];
return [temperature, condition, city_name];
} else {
print(response.statusCode);
}
}
}
我收到一个奇怪的错误,说我无法返回List<String>
,因为期望返回List<String>
。
答案 0 :(得分:1)
由于获取数据的函数是异步的,因此应返回Future<List<String>>
示例,如下所示:
Future<List<String>> getData() async {
var response = await http.get(url);
if (response.statusCode == 200) {
String data = response.body;
print(data);
var temperature = jsonDecode(data)['main']['temp'];
var condition = jsonDecode(data)['weather'][0]['id'];
var city_name = jsonDecode(data)['name'];
return <String>[temperature, condition, city_name];
} else {
print(response.statusCode);
}
}
另外,您不必要解码3次,您可以将其保存在var中一次,以供进一步使用,例如:
String data = response.body;
var decodedData = jsonDecode(data);
var temperature = decodedData['main']['temp'];
var condition = decodedData['weather'][0]['id'];
var city_name = decodedData['name'];
答案 1 :(得分:0)
作为概括,当您在异步函数中收到此错误时:
无法从方法返回类型x的值,因为它具有一个 x的返回类型
该消息似乎很奇怪,但这可能意味着您缺少Future <>返回类型。
因此将Future <>添加到您的方法返回类型:
示例:
List<String> getValues() async
{
List<String> list = await getJson();
return list;
}
更改为:
Future<List<String>> getValues() async
{
List<String> list = await getJson();
return list;
}