错误:方法'getLocation'无法返回类型'LocationModel'的值,因为它的返回类型为'List <dynamic>'

时间:2020-10-11 01:40:09

标签: api flutter http dart

Future<List> getLocation(String city,DateTime date) async {
    try {
      http.Response hasil = await http.get(
          Uri.encodeFull(
              "https://api.pray.zone/v2/times/day.json?city=${city}&date=${date}"),
          headers: {"Accept": "Application/json"});
      if (hasil.statusCode == 200) {
        print("Location Successfully Gathered");
        final data = locationModelFromJson(hasil.body);
        return data;
      } else {
        print("Error Status ${hasil.statusCode.toString()}");
      }
    } catch (e) {
      print("error catch $e");
      return null;
    }
  }

为什么我不能返回数据变量?它说,因为模型的返回类型为List<dynamic>

编辑: 我的模型是https://textuploader.com/1pmb6

1 个答案:

答案 0 :(得分:0)

如您所见,正在获取和解析的数据为LocationModel.fromJson,并且您正在返回数据。但是方法的返回类型为Future<List>,因此很明显,您没有返回您提到的方法将返回的类型。

正确的实现方式是

Future<LocationModel> getLocation(String city,DateTime date) async {
   ...
  }

如果您的API返回的是LocationModel列表,这就是我假设您提到列表的原因,

那么您将必须执行此操作

Future<List<LocationModel> getLocation(String city,DateTime date) async {
    try {
      http.Response hasil = await http.get(
          Uri.encodeFull(
              "https://api.pray.zone/v2/times/day.json?city=${city}&date=${date}"),
          headers: {"Accept": "Application/json"});
      if (hasil.statusCode == 200) {
        print("Location Successfully Gathered");
         
         List<LocationModel> locs =[];

         hasil.forEach((d){
            final l = locationModelFromJson(d.body);
              locs.add(l);
          });     
     
        return locs;
      } else {
        print("Error Status ${hasil.statusCode.toString()}");
      }
    } catch (e) {
      print("error catch $e");
      return null;
    }
  }

Dart是一种非常严格的类型化语言,因此,如果您不提及类型,Dart会默认认为它是dynamic,因此会出现该错误。