Dart: cannot convert List<dynamic> to List<Map<String, dynamic>> despite cast Dart: cannot convert List<dynamic> to List<Map<String, dynamic>> despite cast dart dart

Dart: cannot convert List<dynamic> to List<Map<String, dynamic>> despite cast


If data is a List of words, you can "cast" to generic List and iterate each item to cast into a new Word object,

List<Word> temp = (jsonMap['data'] as List).map((itemWord) => Word.fromJson(itemWord)).toList();

The key is String, and data is Dynamic, if jsonMap['data'] is a List on jsonString, it's not a Map<String,dynamic> and can not cast direct to map.

Sample of jsonString and convert:

final jsonString = ''' {  "field": "titulo",  "data": [{"teste":1},{"teste":2},{"teste":3},{"teste":4}]}''';final jsonMap = json.decode(jsonString);    List<Word> temp = (jsonMap['data'] as List)        .map((itemWord) => Word.fromJson(itemWord))        .toList();

Word Class

class Word {  int teste;  Word({this.teste});  Word.fromJson(Map<String, dynamic> json) {    teste = json['teste'];  }  Map<String, dynamic> toJson() {    final Map<String, dynamic> data = new Map<String, dynamic>();    data['teste'] = this.teste;    return data;  }}

Generated classs using JSON to Darthttps://javiercbk.github.io/json_to_dart/


If you want to convert a List<dynamic> to List<Map<String, dynamic>> as the title suggests, you should cast 2 times:

(jsonDecode(response.body)["data"] as List).map((e) => e as Map<String, dynamic>)?.toList();


If you are using strong mode I had to explicitly define the field type the ? was also not necessary.

Note the 'dynamic e'

(jsonDecode(response.body)["data"] as List).map((dynamic e) => e as Map<String, dynamic>).toList();