Flutter中如何将接口返回的Json数据转为列表?返回类型报错如何解决
问题原因
你的_getMetadata方法声明的返回值类型为Future<List<SongData>>,要求返回一个承载SongData类型列表的Future对象,但当前代码直接返回单个SongData实例,返回类型和实际返回值的类型不匹配,因此触发了类型校验错误。
解决方案
根据实际业务需求和接口返回结构,选择以下两种方案之一即可:
方案1:接口返回单条歌曲数据,无需列表
直接修改方法的返回类型声明为Future<SongData>,适配实际返回值类型:
Future<SongData> _getMetadata() async { Uri url = Uri.parse('https://radioactivefm.gr/live/api/getCoverJson.php'); final response = await http.get(url); var data = jsonDecode(response.body); print('data: $data'); return SongData.fromJson(data); }
方案2:接口返回歌曲数组,确实需要返回列表
如果jsonDecode得到的data本身是数组类型,遍历数组每一项分别解析为SongData实例,再整合成列表返回:
Future<List<SongData>> _getMetadata() async { Uri url = Uri.parse('https://radioactivefm.gr/live/api/getCoverJson.php'); final response = await http.get(url); var data = jsonDecode(response.body); print('data: $data'); return (data as List).map((item) => SongData.fromJson(item)).toList(); }
如果不确定接口返回的结构,可以打印data.runtimeType查看解析后的数据类型,再对应调整逻辑。
内容的提问来源于stack exchange,提问作者Mostafijur Rahman
相关产品推荐
相关产品推荐

