Listview builder 创建列表项的副本

Posted

技术标签:

【中文标题】Listview builder 创建列表项的副本【英文标题】:Listview builder creating duplicate of list item 【发布时间】:2020-01-10 10:15:30 【问题描述】:

我有一个使用列表视图构建器构建的小部件列表。问题是当我更改列表中某个项目的状态(使用列表项的 ontap 属性)时,状态会发生变化,但是该变异列表项的精确副本会添加到列表的最顶部

片段

List data = [1,2,2,1,1];

return Scrollbar(
      child: ListView.builder(

        itemCount: data.length,
        itemBuilder: (context, int index) 
          final s = data[index];

          return ListTile(

            dense: false,
            leading: leading(leading),
            title: Text(s),
            subtitle: Text(
              "$s",
              style: Theme.of(context).textTheme.caption,
            ),
            onTap: () 
              setState(() //do something to the subtitle);
            ,
          );
        ,
      ),
    );

【问题讨论】:

你解决了这个问题吗? 【参考方案1】:

尝试给每个ListTile 一个唯一的Key

例如:

     return ListTile(
        key: Key("$index"),
        dense: false,
        leading: leading(leading),
        title: Text(s),
        subtitle: Text(
          "$s",
          style: Theme.of(context).textTheme.caption,
        ),
        onTap: () 
          setState(() //do something to the subtitle);
        ,
      );

【讨论】:

你能告诉我你的数据变量声明在哪里吗?

以上是关于Listview builder 创建列表项的副本的主要内容,如果未能解决你的问题,请参考以下文章