Flutter报错:运算符'[]'未针对'Object?'类定义的解决方法
Dart代码错误修复方案
错误原因
questions[0]["answer"]对应的是**列表(List)**而非单个Map对象,你直接对列表使用字符串键["score"],不符合列表的数字索引规则。- Dart中动态Map的取值默认返回
Object?类型,该类型未定义[]操作符,必须明确类型转换后才能继续使用键值访问。
修复方法
方法1:修正索引并添加类型断言
直接调整访问路径,先从answer列表中选中具体答案项,再通过类型断言让Dart识别数据类型:
main() { final questions = const [ { "question": "Your favorite animal?", "answer": [ {"text": "Lion", "score": 4}, {"text": "Tiger", "score": 6}, ] } ]; // 获取第一个问题的第一个答案的score print((((questions[0] as Map<String, dynamic>)["answer"] as List)[0] as Map<String, dynamic>)["score"]); // 获取第一个问题的第二个答案的score print((((questions[0] as Map<String, dynamic>)["answer"] as List)[1] as Map<String, dynamic>)["score"]); }
方法2:使用强类型类(更推荐)
通过自定义类强类型化数据结构,彻底避免动态类型的隐患,代码可读性更高:
class Answer { final String text; final int score; const Answer({required this.text, required this.score}); } class Question { final String question; final List<Answer> answers; const Question({required this.question, required this.answers}); } main() { final questions = const [ Question( question: "Your favorite animal?", answers: [ Answer(text: "Lion", score: 4), Answer(text: "Tiger", score: 6), ] ) ]; // 访问第一个问题的第一个答案分数 print(questions[0].answers[0].score); // 访问第一个问题的第二个答案分数 print(questions[0].answers[1].score); }
内容的提问来源于stack exchange,提问作者Dennis Castro
相关产品推荐
相关产品推荐

