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

Flutter Fetch API报错求助:索引越界与类型不匹配问题

问题修复方案

1. 解决RangeError(index)错误

该错误是由于你尝试访问列表中不存在的索引(比如索引1,但items列表长度仅为1),或是错误使用固定索引而非遍历所有地址项导致的。

正确处理方式:

  • 遍历所有地址项:如果需要获取全部地址,不要用固定索引,直接遍历items集合:
// 假设接口返回数据已解析为Map<String, dynamic>
List<dynamic> addressItems = response.data['items'];
for (var item in addressItems) {
  String shipto = item['shipto'];
  String address = item['address'];
  print('shipto: $shipto, 地址: $address');
}
  • 按shipto值筛选地址:如果需要指定shipto对应的地址,用条件筛选而非索引定位:
// 获取shipto为"1"的地址
var targetAddress = addressItems.firstWhere(
  (item) => item['shipto'] == "1",
  orElse: () => null,
);
if (targetAddress != null) {
  print(targetAddress['address']);
}

2. 解决type 'string' is not a subtype of type 'int' of 'index'错误

这个错误是因为你把字符串类型的shipto值当作列表索引使用(列表索引必须是int类型),比如写了items["1"],但列表仅支持items[1]这类int索引。

正确处理方式:

  • 优先用上面的firstWhere筛选方法匹配shipto值,不要将shipto当作索引使用
  • 如果确实需要将数字格式的shipto字符串转成索引,先做类型转换并校验有效性:
String shiptoStr = "1";
int shiptoIndex = int.parse(shiptoStr);
// 先判断索引是否在列表有效范围内
if (shiptoIndex >= 0 && shiptoIndex < addressItems.length) {
  var address = addressItems[shiptoIndex]['address'];
} else {
  print('无效的shipto索引');
}

额外注意事项

  • 确认接口返回的items是数组类型,而非单个对象。如果items是单个对象,列表长度为1,自然只能访问索引0
  • 处理数据前先判断items是否为空,避免空指针错误:
if (addressItems.isNotEmpty) {
  // 处理地址数据
} else {
  print('没有地址数据');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:35:25