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

RangeError问题求助:TUindex无法接收大于9的数值

RangeError问题求助:TUindex无法接收大于9的数值

大家好,我最近在开发Flutter项目时遇到了一个头疼的RangeError问题,折腾了好久都没解决,想请各位大佬帮忙看看。

我做了一个横向滚动的ListView,用来展示1到15的条目,但不管怎么调整类型(试过int、double、String),只要TUindex的数值超过9,就会触发RangeError,完全没法正常加载10到15的条目。我已经按照其他帖子的建议设置了itemCount: TU.length,但问题依然存在。

以下是我的代码片段:

变量定义

// 变量定义
int CurrentTU = 1;
List TU = <int>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];

ListView构造器

// ListView构造器
ListView.builder(
  scrollDirection: Axis.horizontal,
  itemCount: TU.length,
  shrinkWrap: true,
  physics: const ScrollPhysics(),
  itemBuilder: (context, index) {
    return TUEntry(
      TUindex: TU[index],
    );
  },
),

TUEntry组件

// TUEntry组件
class TUEntry extends StatelessWidget {
  const TUEntry({super.key, required this.TUindex});

  final int TUvalue = 10;
  final int TUindex;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 40,
      width: 40,
      color: Colors.grey,
      child: Column(children: [
        if (Events1.elementAt(TUindex) == 'N')
          const Icon(Icons.add, color: Colors.grey,)
        else
          FIcon(ftr: Events1.elementAt(TUindex)),

        if (Events2.elementAt(TUindex) == 'N')
          const Icon(Icons.add, color: Colors.grey,)
        else
          FIcon(ftr: Events2.elementAt(TUindex)),

        if (Events3.elementAt(TUindex) == 'N')
          const Icon(Icons.add, color: Colors.grey,)
        else
          FIcon(ftr: Events3.elementAt(TUindex)),

        if (TUindex == CurrentTU)
          const Icon(Icons.gps_fixed)
        else
          const Icon(Icons.gps_not_fixed),

        if (TUindex == CurrentTU)
          const Icon(Icons.arrow_upward_rounded)
        else
          Container(child: Text('-- $TUindex --'),),
      ]),
    );
  }
}

我试过把TU列表改成double或者String类型,但问题完全没变化,还是只能加载0-9的数值。有没有人能帮我分析下问题出在哪?


可能的问题分析与解决方案

仔细看代码后,我怀疑问题出在Events1、Events2、Events3这三个列表上:

  • 你用TUindex作为索引去访问这三个列表,但TUindex的取值是1-15,而如果这三个列表的长度只有10(索引范围0-9),那当TUindex等于10时,就会超出列表的最大索引,直接触发RangeError。
  • 另外,Flutter中列表的索引是0-based(从0开始),但你的TU列表是1-based(从1开始),这大概率是索引基数搞混了导致的问题。

给你两个可行的解决方案:

  1. 调整事件列表的长度:确保Events1、Events2、Events3的长度至少为15,和TU列表的长度对应,这样1-15的索引都能找到对应的元素。
  2. 修正索引计算方式:如果事件列表的长度是10,且你本来想让TUindex对应事件列表的位置,那把事件列表的访问代码改成Events1.elementAt(TUindex - 1),把1-based的TUindex转换成0-based的索引。比如:
// 修正后的示例代码
if (Events1.elementAt(TUindex - 1) == 'N')
  const Icon(Icons.add, color: Colors.grey,)
else
  FIcon(ftr: Events1.elementAt(TUindex - 1)),

这样当TUindex是10时,就会取Events1的第9个元素(0-based索引),不会再超出范围了。

备注:内容来源于stack exchange,提问作者David Asher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 16:02:56