Flutter ListView嵌套PageView加载媒体时出现RangeError下标越界问题
错误原因
你创建的lista_medios是二维列表结构,每次向里面添加元素时,都是插入长度固定为1的List<PostMedia>子列表,所以任意lista_medios[indice]的合法下标只有0。
但你访问资源时用了lista_medios[indice][indexPost],indexPost是外层列表的帖子序号,第2条帖子对应的indexPost就是1,超过了子列表的最大合法下标0,直接触发了下标越界错误。
修复方案
快速修复
直接把出错行的indexPost替换为0即可,修改后代码如下:
NetworkImage(lista_medios[indice][0].media_url),
优化建议
你当前的lista_medios二维结构没有实际作用,直接改成一维List<PostMedia>可以简化逻辑,避免后续再出现同类下标错误:
- 把
lista_medios的定义修改为:
List<PostMedia> lista_medios = [];
- 所有添加元素的逻辑,直接插入
PostMedia对象,不需要再包一层列表,比如原来的:
List<PostMedia> lista1 = [ PostMedia( media_url: foto1, es_foto: true, es_video: false, es_youtube: false) ]; lista_medios.add(lista1);
改为:
lista_medios.add(PostMedia( media_url: foto1, es_foto: true, es_video: false, es_youtube: false ));
- 最后访问资源的代码简化为:
NetworkImage(lista_medios[indice].media_url),
PageView.builder的itemCount还是使用lista_medios.length即可,不需要额外修改。
内容的提问来源于stack exchange,提问作者mvasco
相关产品推荐
相关产品推荐

