输入&#39;列出<dynamic>&#39;不是类型&#39; List <int>&#39;的子类型哪里

时间:2018-05-09 03:40:42

标签: dart flutter

我是Flutter的新手,我尝试运行一个github项目但是得到类似List动态的错误不是List int where类型的子类型。 Github Link

错误行

List<int> genreIds;

MediaItem._internalFromJson(Map jsonMap, {MediaType type: MediaType.movie})
      :
        type = type,
        id = jsonMap["id"].toInt(),
        voteAverage = jsonMap["vote_average"].toDouble(),
        title = jsonMap[(type == MediaType.movie ? "title" : "name")],
        posterPath = jsonMap["poster_path"] ?? "",
        backdropPath = jsonMap["backdrop_path"] ?? "",
        overview = jsonMap["overview"],
        releaseDate = jsonMap[(type == MediaType.movie
            ? "release_date"
            : "first_air_date")],

        genreIds = jsonMap["genre_ids"];//in this line


}

Above code File

任何帮助将不胜感激,谢谢你。

4 个答案:

答案 0 :(得分:20)

更改

genreIds = jsonMap["genre_ids"];

genreIds = jsonMap["genre_ids"].cast<int>();
JSON映射或列表中的

类型没有具体的泛型类型。 genreIds需要List<int>而不是List(或List<dynamic>),因此您需要先将值设置为所需类型,然后才能进行分配。

如果您之前没有看到相同代码的此错误,那么可能是因为您升级到了--preview-dart-2成为默认值的Dart版本(之前已选择加入)

答案 1 :(得分:2)

一种更短的处理方式是

genreIds = (jsonMap["genre_ids"] as List)?.map((e) => e as int)?.toList();

答案 2 :(得分:2)

我做了cast<Type>(的建议,并且工作了一段时间。虽然我遇到了一个错误,如果映射中的键的值为空(例如,找不到并抛出错误)

要解决此问题,您可以进行丑陋的内联null检查:

这是使用空值感知?.运算符来实现此目的的更清洁,更巧妙的方法:

尝试执行此操作(此类型强制转换可以解决null问题)

genreIds = jsonMap["genre_ids"]?.cast<int>()

代替

genreIds = jsonMap["genre_ids"].cast<int>();

答案 3 :(得分:0)

var genreIdsFromJson= jsonMap['genre_ids'];
List<int> genreIdsList = new List<int>.from(genreIdsFromJson);

// then you can use gendreIdsList to the mapping function
...
gendreIds = genreIdsList
...