【发布时间】:2021-03-18 10:36:55
【问题描述】:
我正在尝试创建一个更简单的上下文操作栏(CAB)https://pub.dev/packages/contextualactionbar
我想做的是在 Flutter 中更新 ListView 中的所有项目。 例如,当我长按某个项目时,我想为每个 ListTile 显示一个尾随复选框。该项目可以是有状态的小部件。
这是我想做的事情的 gif:
我尝试使用来自https://stackoverflow.com/a/57310380/5712419 的 GlobalKey 示例
使用 GlobalKey,只有可见项目会更新。
2021 年 4 月 28 日更新:我用对我有用的东西回答了这个问题:Provider 包。我认为它比使用 GlobalKey 更干净。
【问题讨论】:
-
您不应该通过全局键引用您的列表项。您的状态对象应该在您的 statefull 小部件中 - 构建列表的那个。列表元素应该引用您的状态对象。然后,您的 onLongPressCode 将操纵您的状态对象(列表或您决定这样做),而 ListView 将使用该状态重建。
-
如果我理解正确我必须从 ListObjectWidget 中获取状态对象 ListObjectWidgetState。我怎样才能做到这一点? pastebin.com/D79UYh6e
-
我目前面临的一个问题是,每次我向下滚动列表时,所选项目都会重置为未选择。 (我认为 Flutter 在滚动时会重建这些项目)
-
我还有一个问题:如何显示列表视图中的项目数。我真的很想拥有类似
_ListViewObjects(list).getWidgets() -
看来您的操作方式错误。例如 - 要显示项目计数,看起来您正在尝试引用 UI 组件,然后计算它生成的小部件的数量。这不是应该这样做的:Flutter 是“反应式”框架,您应该始终仅根据数据绘制界面;不基于其他组件。因此,如果您想显示列表中的项目数,只需使用: Text("Item count is ${ListObjects.length}");这将在包含您的 ListObjects 的 Widget 的构建方法中运行。不要从其他 UI 组件中派生它。
标签: flutter