【问题标题】:How do i monitor which ListView item is selected in Flutter?如何监控 Flutter 中选择了哪个 ListView 项?
【发布时间】:2023-04-07 17:31:01
【问题描述】:

在我的 listView 中,我将 itemBuilder 值设置为自定义小部件

Widget programsRowWidget(BuildContext context, List<MembershipPrograms> programs) {
return Expanded(
  child: ListView.builder(
    scrollDirection: Axis.horizontal,
    shrinkWrap: true,

    itemCount: programs.length,
    itemBuilder: (context, index) {
      return UsersProgramListItem(program: programs[index]);
    }
  ),
);

在该小部件中,根元素是Card,其子元素是InkWell。我想使用它的onTap 属性来控制是否选择了该项目。如何监控从上面显示的父窗口小部件的 listView 中选择了 listView 中的哪一项,以及如何只允许选择一项?

【问题讨论】:

    标签: flutter mobile


    【解决方案1】:
    • 我如何监控从上面显示的父窗口小部件的 listView 中选择了 listView 中的哪个项目

    您可以使用 bool 标志,例如 isSelected 和 isSelectable,它们被传递给构建器函数中的小部件。主要方面是将选择逻辑从 ListView.builder 分离到上部小部件或元素对象。

    • 如何只允许选择一项?

    使用标志。当一个项目被选中时 - 可以将 selectable for others 的标志设置为 false。

    【讨论】:

    • 如果我理解正确的话,如果一个被选中,而其他元素可选择为 false,我将无法选择另一个元素(这会取消选择先前选择的项目)?我想将这种可能性添加到应用程序中
    • 这是给我带来麻烦的部分,列表项不知道其他项的存在
    • 是的,这完全取决于你将传递给item的onTap函数的实现。这个函数可以返回一个选中的项目,然后你可以过滤与这个选中的项目进行比较的项目,也许对它们应用任何“禁用”效果。选择后,所选项目将被更改并在列表中标记为选中
    • 关于意识:构建该逻辑的唯一方法是将状态管理提升到列表视图的父级。这将是一个实际的项目列表(使它们成为对象的好主意),当前选择的项目字段和选择一个的方法
    • 如果没有看到会导致麻烦的代码,很难说出了什么问题,但我建议不要使用 setState。相反,使用 Provider 或 Bloc 包进行复杂的状态管理是一个很好的做法,它有特殊的构建器来监听当前状态并相应地重建项目。此外,请确保您在列表中的项目上使用键,因为只有当键或类型不同时,颤振才会重建更改的项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    相关资源
    最近更新 更多