类型转换时`String`不是`List<String>`子类型的报错该如何修复?
问题原因
报错是因为你对同一个字段questionText做了冲突的类型转换:你先把它转为String给Text组件渲染问题内容,后续又强制把它转为List<String>来生成答案选项,该字段实际存储的是字符串类型,无法强转为字符串列表,因此触发类型不匹配报错。
修复方案
你大概率是写错了答案列表对应的字段名,正常你的questions数组的每个元素应该分别存储问题文本和答案列表两个独立字段,结构参考如下:
final List<Map<String, dynamic>> questions = [ { 'questionText': '这是问题1的内容?', 'answers': ['选项1', '选项2', '选项3'], }, // 其余问题结构同上 ];
把你代码中第二处取questionText的逻辑,改为取答案列表对应的字段(比如示例里的answers)即可,修复后的代码片段:
Text( questions[_questionsIndex]['questionText'] as String, style: TextStyle(color: Colors.orange, fontSize: 30), ), // 把这里的questionText替换为你实际存储答案列表的字段名 ...(questions[_questionsIndex]['answers'] as List<String>).map((answer) { return Answer(_answerQuestions, answer); }).toList()
可选优化(规避类型转换风险)
你可以提前对当前问题的字段做判空和类型校验,避免空值或者类型不匹配导致的崩溃:
final currentQues = questions[_questionsIndex]; final String quesText = currentQues['questionText'] as String? ?? ''; final List<String> answerList = currentQues['answers'] as List<String>? ?? []; // 组件层直接使用上面处理好的变量 Text( quesText, style: TextStyle(color: Colors.orange, fontSize: 30), ), ...answerList.map((answer) => Answer(_answerQuestions, answer)).toList()
内容的提问来源于stack exchange,提问作者Jax
相关产品推荐
相关产品推荐

