Flutter中List映射为Widget运行报_CastError,代码无警告如何排查?
错误根因
你触发的_CastError是因为代码执行as List<String>强转时,questions[_questionIndex]['answer']的实际取值为Null,Null类型无法转换为List<String>类型,所以运行时报错。静态检查不会识别这类运行时才会出现的类型不匹配问题,所以你的IDE没有提前抛出警告。
排查步骤
- 检查questions列表中所有Map的答案字段key是否拼写正确:你代码里取的是
answer,确认是不是实际存储用的是answers(复数)、或者大小写不匹配、存在拼写错误,key不匹配会导致取值为Null。 - 检查
_questionIndex的取值是否越界:确保_questionIndex始终满足0 ≤ _questionIndex < questions.length,如果索引超出列表长度,questions[_questionIndex]本身就为Null,后续取['answer']自然也是Null。 - 检查是否存在某条question数据未赋值
answer字段:如果某条题目数据的Map里漏写了answer配置,或者主动设为Null,也会触发该错误。
修复方案
你可以先做空安全兼容处理,避免直接强转崩溃,示例代码如下:
...(questions[_questionIndex]['answer'] as List<String>?)?.map((answer) { return Answer(_answerQuestion, answer); }).toList() ?? [],
上述代码会先尝试把取值转为可空的List<String>?,如果取值为Null,就渲染空列表,不会直接抛出运行时错误。
内容的提问来源于stack exchange,提问作者Okanlawon Gideon
相关产品推荐
相关产品推荐

