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

Dart代码出现Invalid value: Valid value range is empty:0报错求解决

问题解决:索引越界导致的"Invalid value: Valid value range is empty: 0"错误

错误原因

你遇到的错误并非是空值处理问题,而是索引越界:当Last30DayData.values.toList()的长度小于31时,循环中i超过列表最大索引,访问[i]就会触发这个报错。之前的两段代码只判断了Last30DayData是否为null,完全没考虑列表长度不足的情况。

修正方案

先安全获取数据列表,再循环时判断索引是否在有效范围内,超出或空值都用0填充:

方案1:普通循环写法

void _set() {
  List<int> _babus = [];
  // 链式空安全访问,避免深层null报错,默认空列表
  List<dynamic> dataList = _consumptionData['Energies']?[0]?['EnergyInfo']?['Last30DayData']?.values.toList() ?? [];
  
  for (int i = 0; i < 31; i++) {
    // 索引有效且值不为null时取原值,否则用0
    int value = (i < dataList.length && dataList[i] != null) ? dataList[i] as int : 0;
    _babus.add(value);
  }
  print(_babus);
}

方案2:List.generate简洁写法

void _set() {
  List<dynamic> dataList = _consumptionData['Energies']?[0]?['EnergyInfo']?['Last30DayData']?.values.toList() ?? [];
  
  List<int> _babus = List.generate(31, (index) {
    return (index < dataList.length && dataList[index] != null) 
        ? dataList[index] as int 
        : 0;
  });
  print(_babus);
}

关键改进点

  • 使用?链式空安全访问,避免深层嵌套的null引用错误
  • 循环时先判断索引是否在列表有效范围内,彻底解决索引越界问题
  • 同时处理空值情况,确保空值也会被替换为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:10:36