Flutter 如何解决此列表<;动态>;颤振/省道中的类型错误

Flutter 如何解决此列表<;动态>;颤振/省道中的类型错误,flutter,dart,types,Flutter,Dart,Types,我对飞镖和飞镖很陌生。试图从这个未来返回一个列表,该列表从api中提取数据,但我一直收到这个错误。这里有人通过强制转换到列表帮助我解决了一个类似的错误,因为我在一个返回iterable的数组上调用map函数,但在这里我不确定需要做什么 type List<dynamic> is not a subtype of type FutrueOr<ListCity>> 以下是未来的代码: Future<List<City>> fetchCities

我对飞镖和飞镖很陌生。试图从这个未来返回一个列表,该列表从api中提取数据,但我一直收到这个错误。这里有人通过强制转换到列表帮助我解决了一个类似的错误,因为我在一个返回iterable的数组上调用map函数,但在这里我不确定需要做什么

type List<dynamic> is not a subtype of type FutrueOr<ListCity>>
以下是未来的代码:

Future<List<City>> fetchCitiesByProvince(provinceCode) async {
  final response = await http.get(Uri.https('localhost/msd', 'api/cities/' + provinceCode));
  final responseJson = json.decode(response.body);
  final dataMap =  responseJson['data'];

  if (response.statusCode == 200) {
 
    List citiesList = [];
    for (var city in dataMap.keys) {
      if (dataMap[city]['Admin1_str_code'] == provinceCode) {
        citiesList.add(
          {
            'cityCode': dataMap[city]['Feature_int_id'],
            'cityName': dataMap[city]['Feature_str_name']
          }
        );
      }
    }
    return citiesList;
  } else {
    throw Exception('Failed to load cities');
  }
}
Future fetchCitiesByProvince(provinceCode)异步{
最终响应=等待http.get(Uri.https('localhost/msd','api/cities/'+provinceCode));
final responseJson=json.decode(response.body);
最终数据映射=responseJson['data'];
如果(response.statusCode==200){
列表城市列表=[];
for(dataMap.keys中的var city){
如果(数据地图[城市]['Admin1\u str\u code']==省代码){
citiesList.add(
{
“城市代码”:数据地图[城市]['Feature\u int\u id'],
“城市名称”:数据地图[城市]['Feature\u str\u name']
}
);
}
}
返回城市列表;
}否则{
抛出异常(“未能加载城市”);
}
}
城市等级:

class City {
  final String cityCode;
  final String cityName;

  City({@required this.cityCode, @required this.cityName});

  factory City.fromJson(Map<String, dynamic> json) {

    return City(
      cityCode: json['Feature_int_id'],
      cityName: json['Feature_str_name']
    );
  }
}
class城市{
最后一个字符串cityCode;
最后一个字符串cityName;
城市({@required this.cityCode,@required this.cityName});
factory City.fromJson(映射json){
返回城市(
城市代码:json['Feature\u int\u id'],
城市名称:json['Feature\u str\u name']
);
}
}

您需要在方法中返回
列表。因此,请更改以下代码:

List citiesList = [];

下面是更新后的示例代码:

Future<List<City>> fetchCitiesByProvince(provinceCode) async {
  final response = await http.get(Uri.https('localhost/msd', 'api/cities/' + provinceCode));
  final responseJson = json.decode(response.body);
  final dataMap =  responseJson['data'];

  List<City> citiesList = [];

  if (response.statusCode == 200) {
    
    for (var city in dataMap.keys) {
      if (dataMap[city]['Admin1_str_code'] == provinceCode) {
        citiesList.add(City.fromJson(dataMap[city]));
      }
    }
  } else {

    throw Exception('Failed to load cities');
    // either throwing an error or return empty list.
  }

  return citiesList;
}
Future fetchCitiesByProvince(provinceCode)异步{
最终响应=等待http.get(Uri.https('localhost/msd','api/cities/'+provinceCode));
final responseJson=json.decode(response.body);
最终数据映射=responseJson['data'];
列表城市列表=[];
如果(response.statusCode==200){
for(dataMap.keys中的var city){
如果(数据地图[城市]['Admin1\u str\u code']==省代码){
add(City.fromJson(dataMap[City]);
}
}
}否则{
抛出异常(“未能加载城市”);
//抛出错误或返回空列表。
}
返回城市列表;
}

感谢您的回复,我已经尝试过了,但它不起作用。在运行应用程序时,我仍然会遇到相同的错误,但在运行应用程序之前,我可以看到以红色突出显示的代码中有一个问题,悬停在上面的代码表示:参数类型“Map”不能指定给参数类型“City”,在我的应用程序中为我的City类添加了代码question@sayayin:您需要使用城市建造商或工厂。看到我最新的答案了。所以我想我不应该在城市课堂上做任何改变,只是你上面贴的那个?add(City.fromJson(dataMap[City]);有了这个,我仍然得到同样的错误,说得太快了,实际上它起作用了。我错过了citiesList定义的变化。它仍然是List citiesList=[];代替上市公司名单=[];现在一切都好了,谢谢!
List<City> citiesList = [];
City.fromJson(dataMap[city]);

// Or

City(cityCode: dataMap[city]['Feature_int_id'],
        cityName: dataMap[city]['Feature_str_name']
    );
Future<List<City>> fetchCitiesByProvince(provinceCode) async {
  final response = await http.get(Uri.https('localhost/msd', 'api/cities/' + provinceCode));
  final responseJson = json.decode(response.body);
  final dataMap =  responseJson['data'];

  List<City> citiesList = [];

  if (response.statusCode == 200) {
    
    for (var city in dataMap.keys) {
      if (dataMap[city]['Admin1_str_code'] == provinceCode) {
        citiesList.add(City.fromJson(dataMap[city]));
      }
    }
  } else {

    throw Exception('Failed to load cities');
    // either throwing an error or return empty list.
  }

  return citiesList;
}