String 不是 Map 类型的子类型

问题描述 投票:0回答:1

错误:

_TypeError (type 'String' is not a subtype of type 'Map<dynamic, dynamic>' in type cast) 

声明

 final Map<dynamic, dynamic> jsonMap = jsonStr as Map;

jsonStr = [log] [{"title":"Google — Year in Search 2021","artist":"<unknown>","album":"Download"}]

SongModel类是属于on_audio_query包的类, 接受map类型的数据

Future<void> _loadSonMusicList() async {
 final SharedPreferences prefs = await SharedPreferences.getInstance();
 final List<dynamic>? sonMusicListJson = prefs.getStringList(_sonMusicListKey);

if (sonMusicListJson != null && sonMusicListJson.isNotEmpty) {
   final List<SongModel> loadedSongs = [];

  for (String jsonStr in sonMusicListJson) {
    
    final Map<dynamic, dynamic> jsonMap = jsonStr as Map;
    final SongModel song = SongModel(jsonMap); 
    loadedSongs.add(song);

}

  _sonMusicListe = loadedSongs;
} else {
  _sonMusicListe = [];
}

   notifyListeners();
}
flutter dart
1个回答
2
投票

发生错误是因为

jsonStr
List
并且您尝试将其转换为
Map
,请尝试以下操作:

for (var jsonStr in sonMusicListJson) { //<=== change this
  var list = List.from(json.decode(jsonStr)); //<=== add this this
  if(list.isNotEmpty){ //<=== add this this
     final Map<dynamic, dynamic> jsonMap = list.first as Map;
     final SongModel song = SongModel(jsonMap); 
     loadedSongs.add(song);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.