我想将当前页面的ListTile
标记为已选中,但是2天前我正在寻找一种通用方法。
我看到像this这样的例子,你在那里硬编码瓷砖ID并使用一个案例来知道哪个是当前的Tile
。我的问题是,如果我夸大了100张ListTile
s怎么办?如何以编程方式将selected
属性更改为选定的Tile
?或者更真实的情况:我有一个Drawer
在每个版本中改变形状,因此保留带有硬编码ID的代码是没有用的。我希望你理解这个想法。
我已经尝试了几天不同的解决方案,但对我来说似乎没有一般。
我认为只需简单就可以创建一个包含所选数据和bool的新类
class Post {
final bool selected;
var data;
Post({
this.selected,
this.data
});
}
现在当你在itemBuilder中使用LIstView.builder时,如果list [index] .selected为true,那么将颜色设置为蓝色,如果没有则将其设置为白色或任何在点击或压缩的任何内容,无论你使用什么,保存最后点击的索引一个全局变量(称为savedIndex) - 用(-1)初始化它 - 并在此列表索引中将selected更改为true,然后如果savedIndex不等于-1,则更改列表[savedIndex] .selected = false。
全局变量
int selectedIndex =-1;
和itemBuilder。
itemBuilder: (BuildContext _context, int i) {
return GestureDetector(
child:
Container(
decoration: new BoxDecoration(
borderRadius: new BorderRadius.circular(16.0),
color:_list[index].selected? Colors.blue:colors.white,
),
child: _buildRow(_list[index]),) ,
onTap: () {
setState(){
if(savedIndex!=-1){
list[savedIndex].selected=false
}
_list[index].selected=true;
savedIndex=index;
}
}
);
}