Flutter中List<Object>空安全与循环类型转换报错求助
解决循环提取List字符串的类型错误问题
核心问题分析
你的代码报错根源在于类型不匹配:
- 定义的
perguntas是List<Map<String, Object>>,所以perguntas[question_changing]['Respostas']的类型是Object?(可能为null,且无法直接作为Iterable循环) - 尝试用
cast()但Object类型没有该方法,强制非null(!)也无法改变Object的本质,导致后续报错
快速修复方案(基于现有Map结构)
直接将Object?安全转换为List<String>?,同时处理null场景:
final List<Map<String, Object>> perguntas = [ { 'texto': 'Quantos anos o Britto tem?', 'Respostas': ['22', '21', '23'], }, { 'texto': 'Britto é viado?', 'Respostas': ['Sim', 'Não', 'Sim e não'], }, { 'texto': 'Qual o jogo favorito do Britto?', 'Respostas': ['Dark souls', 'Elden Ring', 'Assassins Creed', 'Trove'], }, { 'texto': 'De onde o britto é?', 'Respostas': ['Tangamandápio', 'Favela do rio', 'Alphaville', 'SP'], } ]; // 初始化字符串类型列表,避免动态类型隐患 var respostas = <String>[]; // 安全获取当前问题的答案列表,转换为List<String> final currentAnswers = perguntas[question_changing]['Respostas'] as List<String>?; // 非空判断后再循环添加 if (currentAnswers != null) { respostas.addAll(currentAnswers); }
如果不需要单独循环(只是要获取答案列表),可以更简洁:
var respostas = (perguntas[question_changing]['Respostas'] as List<String>?) ?? [];
更优方案:使用强类型类(避免Map类型隐患)
长期来看,用自定义类替代Map能彻底解决类型转换问题,代码可读性和安全性更高:
// 定义强类型的问题类 class Pergunta { final String texto; final List<String> respostas; Pergunta({required this.texto, required this.respostas}); } // 初始化问题列表 final List<Pergunta> perguntas = [ Pergunta( texto: 'Quantos anos o Britto tem?', respostas: ['22', '21', '23'], ), Pergunta( texto: 'Britto é viado?', respostas: ['Sim', 'Não', 'Sim e não'], ), Pergunta( texto: 'Qual o jogo favorito do Britto?', respostas: ['Dark souls', 'Elden Ring', 'Assassins Creed', 'Trove'], ), Pergunta( texto: 'De onde o britto é?', respostas: ['Tangamandápio', 'Favela do rio', 'Alphaville', 'SP'], ), ]; // 直接获取答案列表,无类型转换问题 var respostas = perguntas[question_changing].respostas;
内容的提问来源于stack exchange,提问作者Raphael Wesley
相关产品推荐
相关产品推荐

