Flutter中为何无法连续使用两个索引?索引越界问题求助
解决索引越界问题的方案
你遇到的问题核心是重复使用了同一个index变量访问两个长度不匹配的列表:ListView.builder的index是外层列表catalogDrawer的遍历索引,但你用它同时去访问内层的catalogDrawer[index].one列表,当内层列表长度小于外层的index值时,就会触发越界错误。
针对服务器返回元素数量不固定的情况,给你几个可行的处理方式:
方式1:嵌套遍历内层列表
如果需要展示catalogDrawer[index].one里的所有元素,应该嵌套一个列表组件(比如ListView.builder或Wrap)来遍历内层列表,用独立的索引变量:
child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('当前分类:${catalogDrawer[index].name}'), // 嵌套遍历内层one列表 ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: catalogDrawer[index].one.length, itemBuilder: (context, innerIndex) { return Text('name - ${catalogDrawer[index].one[innerIndex].name}'); }, ), ], )
方式2:仅展示内层列表的指定元素(需判空)
如果只需要展示内层列表的第一个元素,必须先判断内层列表的长度,避免越界:
child: Text( catalogDrawer[index].one.isNotEmpty ? 'name - ${catalogDrawer[index].one[0].name}' : '暂无数据', )
方式3:动态判断索引有效性
如果确实需要根据外层索引对应内层的某个位置,一定要先做长度校验:
child: Text( (catalogDrawer[index].one.length > index) ? 'name - ${catalogDrawer[index].one[index].name}' : '无对应数据', )
关键原则:不同列表的遍历必须使用各自独立的索引变量,且访问列表元素前一定要先判断列表长度是否足够。
内容的提问来源于stack exchange,提问作者Daniil
相关产品推荐
相关产品推荐

