Flutter错误:[ERROR:flutter / lib / ui / ui_dart_state.cc(157)]未处理的异常:类型'List <dynamic>'不是类型'Map <String,dynamic>'的子类型

时间:2020-01-17 02:17:27

标签: listview flutter

我想从api获取列表视图并将其放入我的应用程序屏幕,但它向我显示了

<script
async defer src="https://maps.googleapis.com/maps/api/js?key={MY_API_KEY}&callback=initMap"></script>

在我的提供程序中,我添加了我需要的未来,但是现在有一个错误,我无法运行登录应用程序

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'

这是我用来返回国家/地区类别的模型

List<Country> _country;
List<Country> get country => _country;

Future<dynamic> countryList() async {
    _isLoading = true;
    notifyListeners();

      http.Response  response = await http.get(Environment.country,
        headers: Environment.requestHeader);

    Map<String,dynamic> res = json.decode(response.body);
    var results;
    if (res['code'] == 200) {
      _country = [];
      res['message'].forEach((v) {
        _country.add(new Country.fromJson(v));
      });
      results = true;
    } else {
      results =
          FailedRequest(code: 400, message: res['message'], status: false);
    }
    _isLoading = false;
    notifyListeners();
    return results;
  }

我的json响应

class Country{
  String name;
  String photo;

  Country({
    this.name,
    this.photo,
  });

  Country.fromJson(Map<String, dynamic> json){
    name = json['countryName'];
    photo = json['countryImage'].toString();
  }
}

我试图添加到列表语句,但它也没有起作用!

2 个答案:

答案 0 :(得分:0)

我想问题出在这里:

Map<String,dynamic> res = json.decode(response.body);

您的json返回了地图列表:

respond data : [{"countryName":"Egypt","countryImage":"https://i.ytimg.com/vi/TWaReNkjTLk/maxresdefault.jpg"},{"countryName":"Canada","countryImage":"https://pix10.agoda.net/geo/country/100/3_100_canada_02.jpg?s=1920x"},{"countryName":"US","countryImage":"https://www.green-card.com/assets/Uploads/living-usa-states-florida-green-card.jpg"}]

但是,您正在将响应(即列表)分配给地图。

尝试将Map<String,dynamic> res = json.decode(response.body);更改为List res = json.decode(response.body);

希望对您有所帮助!

答案 1 :(得分:0)

您的响应数据返回地图列表!

如果您确定只有一张地图(国家或地区),请更改

Map<String,dynamic> res = json.decode(response.body);

Map<String,dynamic> res = json.decode(response.body)[0];

如果地图数量(国家/地区或其他),请更改您的

Map<String,dynamic> res = json.decode(response.body);

List<Map<String,dynamic>> res = json.decode(response.body);