Flutter ListView.builder获取点击项索引并按索引调用setState更新变量
实现方案
首先你需要先在当前页面的State类中声明你要修改的目标变量,示例声明如下:
class 你的当前页面State extends State<你的当前页面> { // 声明目标变量,可根据你的需求修改初始值 int targetValue = 0; // 其余原有代码... }
然后修改ListView.builder中InkWell的onTap回调逻辑即可:itemBuilder提供的index参数是从0开始计数的列表项索引,你需要的1、2、3对应index + 1,直接在点击时先执行setState赋值,再保留原有跳转逻辑即可。
修改后的完整列表代码如下:
ListView.builder( itemCount: recentList1.length, scrollDirection: Axis.vertical, shrinkWrap: true, physics: BouncingScrollPhysics(), itemBuilder: (context, index) { var recent = recentList1[index]; return InkWell( onTap: () { // 新增setState逻辑,index从0开始,+1后正好对应你要的1/2/3 setState(() { targetValue = index + 1; }); // 保留你原有的页面跳转逻辑,不需要跳转可删除这段Navigator代码 Navigator.push( context, MaterialPageRoute( builder: (context) => p1Read(contents: recent), ), ); }, child: Container( margin: EdgeInsets.symmetric(horizontal: 18.0, vertical: 8.0), child: pt1Card(contents: recent), ), ); }, )
该实现无需硬编码判断位置,后续recentList1元素数量增加时也可以自动适配,点击第N项就会自动把targetValue赋值为N。
内容的提问来源于stack exchange,提问作者LaurenTsai
相关产品推荐
相关产品推荐

