You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter报错:运算符'[]'未针对'Object?'类定义的解决方法

Dart代码错误修复方案

错误原因

  1. questions[0]["answer"]对应的是**列表(List)**而非单个Map对象,你直接对列表使用字符串键["score"],不符合列表的数字索引规则。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:50:33