我是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
}
任何帮助将不胜感激,谢谢你。
答案 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
...