首页 > 解决方案 > 如何在 dart 中正确进行类型转换

问题描述

我正在构建一个使用 Dog API 的颤振应用程序,但我无法将 a 的类型转换MapMap<String, List<String>>

我尝试使用map.cast<String,List<String>>()但在尝试返回结果时没有产生错误(在指定函数返回 a 之后Map<<String,List<String>>>),当我运行时print(map.runtimeType);输出是CastMap<String, dynamic, String, List<String>>而不是Map<<String,List<String>>>

Future<Map<String,List<String>>> getbreeds() async{
    var json=await http.get('https://dog.ceo/api/breeds/list/all');
    var linkedHashMap =Map.from(jsonDecode(json.body)) ;
    var map=linkedHashMap['message'].cast<String,List<String>>();
    print(map.runtimeType);
    return map;
  }

我希望的输出是print(map.runtimeType);Map<<String,List<String>>>但相反,我得到CastMap<String, dynamic, String, List<String>>

标签: flutterdartcasting

解决方案


ACastMap<String, dynamic, String, List<String>>是的一个子类型,Map<String, List<String>>所以这不是问题。这类似于您指定返回类型的情况,num并且您返回的具体值是int.

您要遇到的问题是,当您从地图中读取值时,您将得到 aList<dynamic>而不是 a List<String>。您还需要更改内部值的运行时类型。

var map = (linkedHashMap['message'] as Map).map((key, value) => MapEntry<String, List<String>>(key, List.from(value));

推荐阅读