【问题标题】:Flutter remove item from ListView.builder not workingFlutter 从 ListView.builder 中删除项目不起作用
【发布时间】:2021-06-28 11:07:34
【问题描述】:

我有一个小部件列表,我想删除最后一项,但是当我执行下面的 5 行时没有任何反应。

if (mounted) {
  setState(() {
    verlustContentList.removeLast();
  });
}

这就是我生成列表的方式:

  generateList() async {

   return verlustContentList = List.generate(
     15,
     (index) => VerlustContent(
       key: Key(
         index.toString(),
       ),
       
     ),
   );
 }

这就是我显示列表的方式:

StreamBuilder(
                  stream: generateList().asStream(),
                  builder: (BuildContext context, AsyncSnapshot snapshot) {
                    return ListView.builder(
                      itemCount: verlustContentList.length,
                      itemBuilder: (context, index) {
                        
                          return verlustContentList[index];
                        
                      },
                    );
                  },
                );

带有设计的 VerlustContent 类是有状态的。

【问题讨论】:

  • 你能发布一个最小的可重现代码来让我们更好地帮助我们吗?
  • 是的,我会更新的
  • 好的,我希望现在更容易

标签: flutter listview stream-builder


【解决方案1】:

您需要使用密钥。我建议观看此 youtube 视频以快速介绍它们,它将解决您的问题。 https://www.youtube.com/watch?v=kn0EOS-ZiIc&ab_channel=GoogleDevelopers

使用键来控制框架与其他小部件匹配 小部件重建时的小部件。默认情况下,框架匹配 当前和先前构建中的小部件根据其 runtimeType 和它们出现的顺序。用钥匙, 框架要求两个小部件具有相同的键以及 相同的 runtimeType。

键在构建许多相同实例的小部件中最有用 小部件的类型。例如, ShoppingList 小部件,它构建 刚好够 ShoppingListItem 实例填充其可见区域:

如果没有键,当前构建中的第一个条目将始终同步 与前一个构建中的第一个条目,即使在语义上, 列表中的第一个条目刚刚滚出屏幕,不再是 在视口中可见。

通过为列表中的每个条目分配一个“语义”键,无限 list 可以更有效,因为框架将条目与 匹配语义键,因此相似(或相同)视觉 外观。此外,在语义上同步条目意味着 在有状态的子小部件中保留的状态仍然附加到相同的 语义条目而不是在相同数字位置的条目 视口。

【讨论】:

  • 谢谢我应该在哪里添加这些密钥?
  • 查看答案中的视频,我也更新了答案。
  • 好的,谢谢,我会的
  • 好的,我检查了视频,但是当它生成时我已经在我的小部件中添加了一个密钥,但它不起作用或者我错过了什么?
猜你喜欢
  • 2021-01-19
  • 2022-01-23
  • 2021-06-28
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
相关资源
最近更新 更多