类型值不能从方法中返回,因为它的返回类型为

时间:2020-04-10 11:51:09

标签: flutter dart

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>

2 个答案:

答案 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;
  }