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

Flutter/Dart技术疑问:如何从嵌套Map列表中提取文本值?

解决方案

你的问题出在对嵌套结构的访问错误:questions[questionIndex]['answers']返回的是一个选项列表,而非单个选项Map,所以不能直接通过['text']取值,必须先遍历列表拿到单个选项,再提取text字段。

直接修正现有代码(无需改动数据结构)

可以通过两种循环方式实现:

方式1:索引循环

Column(
  children: [
    // 用当前问题的选项数量作为循环上限,避免硬写固定值
    for (var i = 0; i < (questions[questionIndex]['answers'] as List).length; i++)
      Text(
        // 先取列表第i个选项Map,再提取text
        questions[questionIndex]['answers'][i]['text'] as String,
      ),
  ],
),

方式2:直接遍历选项列表(更简洁)

Column(
  children: [
    // 遍历当前问题的所有选项
    for (var answer in questions[questionIndex]['answers'] as List<Map<String, dynamic>>)
      Text(answer['text'] as String),
  ],
),

更优方案:定义类型类(避免dynamic类型警告)

如果希望代码更健壮、可读性更高,可以创建对应的实体类来替代Map结构:

// 定义选项类
class Answer {
  final String text;
  final int answer;

  const Answer({required this.text, required this.answer});
}

// 定义问题类
class Question {
  final String questionText;
  final List<Answer> answers;

  const Question({required this.questionText, required this.answers});
}

// 初始化数据
final questions = const [
  Question(
    questionText: 'This is the first question?',
    answers: [
      Answer(text: 'Answer 1', answer: 1),
      Answer(text: 'Answer 2', answer: 2),
      Answer(text: 'Answer 3', answer: 3),
      Answer(text: 'Answer 4', answer: 4),
    ],
  ),
  Question(
    questionText: 'This is the second question?',
    answers: [
      Answer(text: 'Answer 1', answer: 1),
      Answer(text: 'Answer 2', answer: 2),
      Answer(text: 'Answer 3', answer: 3),
      Answer(text: 'Answer 4', answer: 4),
    ],
  ),
];

此时渲染代码会更简洁直观,且无类型警告:

Column(
  children: [
    for (var answer in questions[questionIndex].answers)
      Text(answer.text),
  ],
),

内容的提问来源于stack exchange,提问作者Cubeiik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:05:17