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

Flutter开发测验App出现RangeError(index)空索引报错如何解决?

问题原因

你出现RangeError (index): Invalid value: Valid value range is empty: 0报错的核心原因是:

  • 初始化时groupValue是空列表,接口返回题目数据后,你直接通过索引访问groupValue[index]读取对应题目的选中值,此时groupValue长度和题目数量不匹配,触发索引越界
  • 你之前设置默认值能解决问题,本质就是给groupValue填充了和题目数量匹配的元素,避免了空数组访问索引的问题

解决方法(无需设置选项默认选中)

你不需要给选项设置默认选中值,只需要保证groupValue的长度和题目数量匹配,且支持未选中状态即可,修改步骤如下:

1. 修改groupValue的类型定义

将原来的非空int列表改为可空int列表,用来存储未选中状态的null值:

// 原代码:List<int> groupValue = [];
// 修改为:
List<int?> groupValue = [];

2. 拿到接口数据后先初始化groupValue

在FutureBuilder判断snapshot.hasData之后,新增初始化groupValue的逻辑,保证数组长度和题目数量一致,初始值全部设为null(代表未选中任何选项):

if (snapshot.hasData) {
  List<Result> list = snapshot.data.result;
  // 新增以下代码,仅在groupValue为空时初始化,避免build时重复重置选中状态
  if (groupValue.isEmpty) {
    groupValue = List.generate(list.length, (index) => null);
  }
  // 保留你原来的ListView.builder代码即可
}

3. 修正提交按钮的越界问题(必须修改)

你原代码中提交按钮的index等于list.length,直接访问groupValue[index]会再次触发越界,如果你要提交所有题目的答案,直接传入groupValue即可:

// 原代码:saveAnswer(questionId, groupValue[index]);
// 修改为提交所有题的答案,或者根据你的业务逻辑调整参数
onPressed: () {
  saveAnswer(questionId, groupValue);
},

效果说明

Radio组件在groupValue为null或者和当前Radio的value不匹配时,会自动显示未选中状态,完全满足你不设置默认选中值的需求,同时也解决了索引越界的报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:39:02