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

时间:2019-11-11 09:30:53

标签: flutter dart

当我点击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"),
            ),
          );
        },
      ),
    );
  }
}

2 个答案:

答案 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选中项不知道选中了哪个项目,因为选中项是整个列表的全局变量。