当我点击ListTile之后,应该只更改一项,但是当我点击那里时,所有ListTile都将更改。
class _HomeScreenState extends State<HomeScreen> {
bool checked = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
itemCount: 7,
itemBuilder: (BuildContext context, int i) {
child: return Container(
decoration: new BoxDecoration(
color: checked ? Colors.teal : Colors.white
),
child: ListTile(
onTap: () => setState(() => checked = true),
title: Text("My product"),
),
);
},
),
);
}
}
答案 0 :(得分:2)
尝试以下代码,
class _HomeScreenState extends State<HomeScreen> {
int checkedIndex = -1;
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
itemCount: 7,
itemBuilder: (BuildContext context, int i) {
return Container(
decoration: BoxDecoration(
color: checkedIndex == i ? Colors.teal : Colors.white
),
child: ListTile(
onTap: () => setState(() => checkedIndex = i),
title: Text("My product"),
),
);
},
),
);
}
}
答案 1 :(得分:0)
尝试使用将保存已窃听列表项的索引而不是bool的数字,只需检查if(i == checked_index)
。在您的情况下,问题是您的bool选中项不知道选中了哪个项目,因为选中项是整个列表的全局变量。