是否可以在颤动的可重新排序的列表视图中禁用对单个项目的重新排序?

Posted

技术标签:

【中文标题】是否可以在颤动的可重新排序的列表视图中禁用对单个项目的重新排序?【英文标题】:Is it possible to disable reordering a single item in a reorderable listview in flutter? 【发布时间】:2021-08-12 09:03:49 【问题描述】:

我正在尝试创建一个满足以下条件的 ListView:

    ListView 中的项目被分类为各个部分,每个部分都有标题 项目可以从一个部分拖到另一个部分 节标题不可拖动

如果ReorderableListView 允许您禁用 ListTile 拖放(换句话说,我将能够在 ListView 中将标题创建为 ListTile 项目并禁用仅拖放到它们上),这将很容易实现同时仍然允许拖放其他所有内容),但我不知道如何。有什么建议吗?

【问题讨论】:

pub.dev/packages/drag_and_drop_lists 这个插件会帮助你 【参考方案1】:

刚刚发现了AbsorbPointer 和IgnorePointer 类。

【讨论】:

这仍然允许围绕它重新排序项目。因此,如果您试图将一个项目保持在顶部,他们可以将另一个项目拖到其上方。 这是一个有效的观察。有了这个实现,我认为这个边缘情况最简单的解决方案是忽略 onReorder 回调中的无效重新排序但我同意理想的实现会阻止顶部标题在重新排序上方的项目时移动【参考方案2】:

您可以使用AbsortPointer 等来阻止移动标题,如您所提到的,但如果其他项目被移动到您不想允许的位置,您可以简单地在onReorder 回调中检查这一点并且不更新底层模型,因此当用户放下物品时,它会回到原来的位置。例如。如果用户尝试将任何可移动项目放置在第一个标题之前,您会检测到这一点 (newIndex == 0) 并提前返回。

【讨论】:

以上是关于是否可以在颤动的可重新排序的列表视图中禁用对单个项目的重新排序?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式防止滚动列表视图颤动

带有列表子项可聚焦android的列表视图上下文菜单

如何在不禁用列表项的命中测试的情况下启用对列表项的选择?

Flutter:如何在列表视图中通过拖放对项目进行排序?

使用 Laravel 4+ 从 jQuery/ajax 保存序列化的可排序数据

如何按降序对列表视图项进行排序