type 'List<dynamic>' is not a subtype of type 'List<int>' where
Change
genreIds = jsonMap["genre_ids"];
to
genreIds = jsonMap["genre_ids"].cast<int>();
types in JSON maps or lists don't have concrete generic types.
genreIds
requires a List<int>
not a List
(or List<dynamic>
), therefore you need to bring the value to its required type before you can assign it.
If you haven't seen this error earlier for the same code, then it's probably because you upgraded to a Dart version where --preview-dart-2
became the default (it was opt-in previously)
A more elegant way could also be initialising new List instead of casting.
var genreIdsFromJson = jsonMap['genre_ids'];
List<int> genreIdsList = new List<int>.from(genreIdsFromJson);
// then you can use gendreIdsList to the mapping function
// ...
gendreIds = genreIdsList
...
Update: As per the documentation
`` All the elements should be instances of E. The elements iterable itself may have any element type, so this constructor can be used to down-cast a List, for example as:
List<SuperType> superList = ...;
List<SubType> subList =
new List<SubType>.from(superList.whereType<SubType>());
This constructor creates a growable list when growable is true; otherwise, it returns a fixed-length list. ``
A shorter way to handle is
genreIds = (jsonMap["genre_ids"] as List)?.map((e) => e as int)?.toList();