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

Flutter访问Model类内JSON嵌套列表出现有效值范围为空错误如何解决

错误原因

触发该错误的核心原因是代码访问了空列表的下标元素,结合你的代码场景,可细分为三类常见情况:

  • 外层snapshot.data列表为空:网络请求未完成、请求失败无异常处理、接口返回空列表时,直接用index访问第0个元素就会触发该报错。
  • 内层datalist列表为空:外层列表有数据,但单个Car对象的datalist字段为空,此时访问datalist[index]会触发报错,通常是接口返回对应字段为空、Bean类解析datalist失败导致默认赋值为空列表。
  • 下标逻辑错误:两层列表共用同一个index,比如外层列表长度为5,下标遍历到2,但对应Car对象的datalist长度只有1,用下标2访问datalist自然超出有效范围。
解决方案
    1. 新增渲染前的空值与状态兜底
      列表渲染前先判断请求状态、外层列表是否为空、单个Car对象的datalist是否为空,避免直接访问下标:
    Widget build(BuildContext context) {
      if (snapshot.connectionState == ConnectionState.waiting) {
        return const CircularProgressIndicator();
      }
      if (snapshot.hasError || !snapshot.hasData || snapshot.data!.isEmpty) {
        return const Text('暂无车辆数据');
      }
      return ListView.builder(
        itemCount: snapshot.data!.length,
        itemBuilder: (context, index) {
          final currentCar = snapshot.data![index];
          if (currentCar.datalist.isEmpty) {
            return const Text('当前车辆无相关数据');
          }
          // 若仅需取datalist的第一个元素,直接用固定下标0,不要复用外层index
          return Text(currentCar.datalist[0].title ?? '无标题');
        }
      );
    }
    
    1. 修正嵌套列表的下标逻辑
      如果需求是遍历展示单个Car下所有datalist的内容,嵌套一层遍历即可,不要共用外层index:
    itemBuilder: (context, index) {
      final currentCar = snapshot.data![index];
      return Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: currentCar.datalist.map((dataItem) {
          return Text(dataItem.title ?? '无标题');
        }).toList(),
      );
    }
    
    1. Bean解析层加空值兼容
      解析datalist时增加空判断,避免解析失败返回null,同时可加日志定位解析问题:
    factory Car.fromJson(Map<String, dynamic> json) {
      return Car(
        // 其余字段解析逻辑
        datalist: (json['datalist'] as List?)
                ?.map((item) => DatalistItem.fromJson(item as Map<String, dynamic>))
                .toList() ??
            [],
      );
    }
    
    1. 网络请求层加异常捕获
      getCars方法中捕获请求、解析异常,出现错误时主动抛出可识别的异常信息,避免静默返回空列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 19:54:08