【问题标题】:Separate and show priority items on top of a ListView? (Pinned Item functionality)在 ListView 上分离并显示优先项? (固定项目功能)
【发布时间】:2021-10-21 20:08:39
【问题描述】:

如何在 ListView 上添加类似于 Google Keep 的“固定项目”功能?

我尝试做 2 个列表视图,并将固定的一个放在列的顶部。但问题是它们分别滚动,如果我将列包装在 Singlechildscrollview 中,它只会给出错误。

我是在正确的轨道上做这件事还是有办法只使用一个列表视图?

【问题讨论】:

    标签: flutter listview flutter-layout


    【解决方案1】:

    我认为 Singlechildscrollview 按我想要的方式工作。我只需要设置 ListView shrinkWrap: truephysics: NeverScrollableScrollPhysics()。我不确定这是否是一个好主意,因为大多数人都说 shrinkWrap 是一个相当繁重的操作。

    SingleChildScrollView(
                physics: ScrollPhysics(),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.start,
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text('Pinned'),
                    PinnedListItemHere(), //ListView of Pinned Items
                    Divider(
                      height: 25.0,
                      thickness: 2.0,
                    ),
                    Text('Others'),
                    UnpinnedListItemHere(), //ListView of Unpinned Items
                  ],
                ),
              ),
    

    【讨论】:

      【解决方案2】:

      如果你想实现:

      • 向您的对象添加一个额外的字段:bool pinned -> 然后您对列表进行排序以确保固定的项目位于列表顶部
      • 在项目周围放置一个 GestureDetector 并使用 onTap 设置 pinned 值 -> pinned = !pinned

      或者试试我刚刚找到的这个包:

      https://pub.dev/packages/pinnable_listview

      【讨论】:

      • 对数据进行排序很好,但我仍然需要在固定和未固定之间放置一个分隔符,例如分隔符或文本之类的。与 Google Keep 类似,它有一个用于普通笔记的“其他”标签,并在固定的笔记上带有“固定”标签
      • 您可以在所有固定后将虚拟对象添加到列表中。你记得那个索引,当 ListView.builder 索引 == 那个索引时,你创建了分隔符而不是 ListTile/Text/Whatever 你使用?所以列表将是: [pinned, pinned, dummy, normal, normal, normal] 当你处于 dummy (索引 == 2)时,你返回一个 Container(color: Colors.black, width: 100, height: 5 )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多