Flutter类型错误:List<dynamic>无法转为List<TeamID>求助
Flutter类型转换错误:List无法转为List
从接口获取数据后,尝试将数据存入List<TeamID>类型的teamslist列表时,抛出类型转换错误:_TypeError (type 'List<dynamic>' is not a subtype of type 'List<TeamID>')。
错误代码示例
class TeamsController with ChangeNotifier { List<TeamID> teamslist = []; TeamsController() { getMyTeams(); } getMyTeams() async { var response = await ApiService().getMyCreatedTeams(); if (response != null) { final databody = json.decode(response); debugPrint(databody['data'].toString()); // 错误发生在这一行 teamslist = databody['data'].map((item) => TeamID.fromJson(item)).toList(); notifyListeners(); } } }
可行的代码写法
如果先将databody['data']存入普通List变量再转换,即可正常运行:
final List list = databody['data']; teamslist = list.map((item) => TeamID.fromJson(item)).toList();
问题原因
json.decode(response)返回的databody['data']类型为dynamic,直接调用map方法时,Dart无法自动推断出映射后的类型,最终toList()生成的是List<dynamic>,无法直接赋值给List<TeamID>类型的变量。- 显式将
databody['data']赋值给List类型变量后,Dart会明确其为List<dynamic>,此时map生成的迭代器类型可被正确推断,toList()最终生成List<TeamID>,完成类型匹配。
其他简化写法
除了先转存到普通List,还可以直接通过类型转换或指定泛型来解决:
- 强制类型转换:
teamslist = (databody['data'] as List).map((item) => TeamID.fromJson(item)).toList();
- 用
List.from指定泛型:
teamslist = List<TeamID>.from(databody['data'].map((item) => TeamID.fromJson(item)));
内容的提问来源于stack exchange,提问作者rameez khan
相关产品推荐
相关产品推荐

