搜索插件、代码仓与 APP 分类

sticky_grouped_list 封面
插件详情v3.1.0

sticky_grouped_list

一个可滚动的位置列表,其中列表项可以分组为部分。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
7470
喜欢数
311
Pub 分数
150

安装插件

flutter pub add sticky_grouped_list

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个扩展 ScrollablePositionedList 的 Flutter 包,可实现带有粘性标题的分组列表部分。它允许用户将项目组织成逻辑组,当用户滚动内容时,章节标题会保持在屏幕顶部固定不动。非常适合具有清晰分类的长列表,例如联系人、消息或产品目录。该包支持所有主要平台,并可无缝集成到现有的 Flutter 应用中。

适合场景

  • 按字母顺序组织联系人
  • 按日期显示聊天消息
  • 创建分类产品列表
  • 构建一个可搜索的目录
  • 实现分组任务列表

主要特点

  • 粘性章节标题
  • 对可滚动分组项的支持
  • 跨平台兼容性
  • 与 ScrollablePositionedList 的轻松集成
  • 可自定义的标题样式

适合对象

  • 包含分类数据的应用程序
  • 长可滚动列表
  • 需要章节导航的用户界面
  • 使用 ScrollablePositionedList 的开发者
  • 需要响应式分组标题的项目

使用建议

  • 需要仔细处理项目键
  • 在非常大的数据集上可能会影响性能
  • 标题行为取决于滚动位置
  • 有限的内置动画
  • 不适用于非滚动布局

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

pub package package publisher build

A ListView in which list items can be grouped to sections. Based on scrollable_positioned_list, which enables programatically scrolling of the list.

Features
  • Easy creation of chat-like interfaces.
  • List items can be separated in groups.
  • For the groups an individual header can be set.
  • Sticky headers with floating option.
  • All fields from ScrollablePositionedList available.

Getting Started

Add the package to your pubspec.yaml:

sticky_grouped_list: ^3.1.0

In your dart file, import the library:

import 'package:sticky_grouped_list/sticky_grouped_list.dart';

Create a StickyGroupedListView Widget:

 final GroupedItemScrollController itemScrollController = GroupedItemScrollController();

 StickyGroupedListView<dynamic, String>(
   elements: _elements,
   groupBy: (dynamic element) => element['group'],
   groupSeparatorBuilder: (dynamic element) => Text(element['group']),
   itemBuilder: (context, dynamic element) => Text(element['name']),
   itemComparator: (e1, e2) => e1['name'].compareTo(e2['name']), // optional
   elementIdentifier: (element) => element.name // optional - see below for usage
   itemScrollController: itemScrollController, // optional
   order: StickyGroupedListOrder.ASC, // optional
 );

If you are using the GroupedItemScrollController you can scroll or jump to an specific position in the list programatically:

  1. By using the index, which will scroll to the element at position [index]:
  itemScrollController.scrollTo(index: 4, duration: Duration(seconds: 2));
  itemScrollController.jumpTo(index: 4);
  1. By using a pre defined element identifier. The identifier is defined by a Function which takes one element and returns a unique identifier of any type. The methods scrollToElement and jumpToElement can be used to jump to an element by providing the elements identifier instead of the index:
  final GroupedItemScrollController itemScrollController = GroupedItemScrollController();

  StickyGroupedListView<dynamic, String>(
    elements: _elements,
    elementIdentifier: (element) => element.name
    itemScrollController: itemScrollController, 
    [...]
  );

  itemScrollController.scrollToElement(identifier: 'item-1', duration: Duration(seconds: 2));
  itemScrollController.jumpToElement(identifier: 'item-2');
Parameters:
Name Description Required Default value
elements A list of the data you want to display in the list required -
itemBuilder / indexedItemBuilder Function which returns an Widget which defines the item. indexedItemBuilder provides the current index as well. If both are defined indexedItemBuilder is preferred yes, either of them -
groupBy Function which maps an element to its grouped value required -
groupSeparatorBuilder Function which gets a element and returns an Widget which defines the group header separator required -
separator A Widget which defines a separator between items inside a group no no separator
floatingHeader When set to true the sticky header will float over the list no false
stickyHeaderBackgroundColor Defines the background color of the sticky header no Color(0xffF7F7F7)
itemScrollController Instead of an ItemScrollController a GroupedItemScrollController needs to be provided. no -
elementIdentifier Used by itemScrollController and defines the unique identifier for each element. no -
order Change to StickyGroupedListOrder.DESC to reverse the group sorting no StickyGroupedListOrder.ASC
groupComparator Can be used to define a custom sorting for the groups. Otherwise the natural sorting order is used no -
itemComparator Can be used to define a custom sorting for the elements inside each group. Otherwise the natural sorting order is used no -
reverse Scrolls in opposite from reading direction (Starting at bottom and scrolling up). Same as in scrollable_positioned_list. no false

GroupedItemScrollController.srollTo() and GroupedItemScrollController.jumpTo() automatic set the alignment so that the item is fully visible aligned under the group header. Both methods take automaticAlignment as a additional optional paramenter which needs to be set to true if alignment is specified.

Also the fields from ScrollablePositionedList.builder can be used.

Highlight - Chat Dialog

Easy creation of chat-like dialogs. Just set the option reverse to true and the option order to StickyGroupedListOrder.DESC. A full example can be found in the examples. The list will be scrolled to the end in the initial state and therefore scrolling will be against redeaing direction.

Difference between grouped_list and sticky_grouped_list:

TThe list views in the GroupedList package are based on the default flutter listview and the silver list. This package is based on the scrollable_positioned_list which enables the possibility to programatically scroll to certain positions in the list. So if you need the ability to programatically scroll the list use the this package otherwise I would recommend to use the GroupedList package.

Used packages:

Package name Copyright License
scrollable_positioned_list Copyright 2018 the Dart project authors, Inc. All rights reserved BSD 3-Clause "New" or "Revised" License

所属分类

依赖

依赖清单 2 项

源码仓库

使用此插件的项目

暂无相关数据。