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 创建列表项的副本的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Using ListView.Builder:如何在我选择的所有项目上仅更改一项的背景颜色

带有过滤条件项的列表视图构建器分页(颤振)

无法使用列表创建 ListView.builder

Flutter/Dart 如何将索引从 Listview.builder 传递到项目小部件

列表项的颤振状态更新

在 Android 中以编程方式创建带有自定义列表项的 ListView - 没有 xml 列表项布局