Flutter类型转换异常:List<dynamic>无法转为List<double>求助
Flutter类型转换异常解决:List转List<List>
异常信息
E/flutter (21169): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)]
Unhandled Exception: type 'List' is not a subtype of type 'List<List>' in type cast
问题背景
getPatientDataList() 返回类型为 Future<List<List<dynamic>>> Function()(注:推测实际应为 Future<List<List<dynamic>>>,否则代码中 .then 无法直接获取列表结果),需要将其中前500条数据转换为 List<List<double>> 类型,但现有转换代码报错。
错误原因
当前代码的类型转换逻辑错误:
List<List<double>> list = (result.getRange(0, 500).toList()).cast<List<List<double>>>();
getRange(0,500).toList() 得到的是 List<List<dynamic>>,直接用 cast<List<List<double>>> 会错误地尝试将外层列表整体转为 List<double> 类型,导致类型不匹配。
正确解决方案
需要逐层转换类型:先将每个子列表从 List<dynamic> 转为 List<double>,再组合成目标类型的外层列表。
方案1:使用 map + cast 快速转换
getPatientDataList().then((result) { dataSize = result.length; List<List<double>> list = result .getRange(0, 500) .map((subList) => subList.cast<double>()) .toList(); print("data " + list.toString()); });
方案2:手动遍历转换(兼容非数值数据)
如果子列表中存在无法直接转为double的元素,可添加异常处理逻辑:
getPatientDataList().then((result) { dataSize = result.length; List<List<double>> list = []; var subRange = result.getRange(0, 500); for (var subList in subRange) { List<double> doubleSubList = []; for (var item in subList) { if (item is num) { doubleSubList.add(item.toDouble()); } else { // 处理非数值情况,比如添加默认值或跳过 doubleSubList.add(0.0); } } list.add(doubleSubList); } print("data " + list.toString()); });
特殊情况处理
如果 getPatientDataList() 确实是 Future<List<List<dynamic>> Function()> 类型(即返回的是一个函数),需要先调用该函数再获取Future:
getPatientDataList()().then((result) { // 后续转换逻辑同上 });
内容的提问来源于stack exchange,提问作者Ayse
相关产品推荐
相关产品推荐

