Flutter使用ListView.builder触发RangeError索引越界报错问题求助
问题原因
ListView.builder未指定itemCount参数时,默认会生成无限个列表项- 你的
data["items"]数组总长度为30,索引合法范围是0~29,当滚动到第31个项(索引为30)时,访问data["items"][30]就触发了数组越界错误
修复方案
只需要给 ListView.builder 增加 itemCount 配置,值为 data["items"] 的长度即可,修改后的代码片段如下:
child: data != null ? ListView.builder( // 新增这一行配置列表总项数 itemCount: data["items"].length, itemBuilder: (context, index) { return Container( padding: const EdgeInsets.all(4.0), decoration: BoxDecoration( color: Colors.white10, borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( blurRadius: 15, offset: Offset(0, 0), color: Color(0x42000000).withOpacity(.08), spreadRadius: -10) ]), child: Padding( padding: const EdgeInsets.all(4.0), child: ListTile( leading: Container( width: 100, child: Text(data["items"][index]["owner"] ["display_name"]), ), title: Text(data["items"][index]["title"]), onTap: () { Navigator.pop(context); Navigator.push( context, MaterialPageRoute( builder: (context) => Answers( number: index, )), ); }, ), ), ); }) : Center( child: CircularProgressIndicator(), ),
补充说明
如果后续需要实现上拉加载更多功能,可以把 itemCount 设为 data["items"].length + 1,在 itemBuilder 里判断 index 是否等于 data["items"].length,返回加载更多组件即可,不会触发越界问题。
内容的提问来源于stack exchange,提问作者lakshya saxena
相关产品推荐
相关产品推荐

