错误:
_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();
}
发生错误是因为
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);
}
}