仅更改一种样式,而不是所有人。改变了所有的ListTile而不是一个

当我点击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"),),);
        },);
  }
}
kankanguoqu 回答:仅更改一种样式,而不是所有人。改变了所有的ListTile而不是一个

尝试以下代码,

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"),),);
        },);
  }
}
,

尝试使用将保存已窃听列表项的索引而不是bool的数字,只需检查if(i == checked_index)。在您的情况下,问题是您的bool选中项不知道选中了哪个项目,因为选中项是整个列表的全局变量。

本文链接:https://www.f2er.com/3125312.html

大家都在问