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

section_view 封面
插件详情v2.0.6

section_view

提供一个包含字母和刷新功能的分组列表视图,您可以完全自定义您的控制

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
1890
喜欢数
34
Pub 分数
140

安装插件

flutter pub add section_view

插件介绍

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

SectionView 是一个 Flutter 包,可实现带字母索引和下拉刷新功能的分节列表视图。它允许完全自定义分节标题并控制滚动行为,非常适合用于联系人列表、商品目录或任何按字母顺序排序的数据。该包支持所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux。开发者可以调整 UI 和交互以匹配其应用的设计语言。

适合场景

  • 带字母索引的联系人列表
  • 产品目录,包含分组项目
  • 可自定义的可滚动区域
  • 带刷新功能的数据显示
  • 列表中的字母导航

主要特点

  • 字母顺序章节标题
  • 下拉刷新支持
  • 完全可自定义的用户界面
  • 跨平台兼容性
  • 在部分之间实现平滑滚动
  • 可配置的标题样式

适合对象

  • 需要字母排序的应用程序
  • 希望自定义部分控件的开发者
  • 需要可刷新列表的项目
  • 具有分组数据的UI密集型应用
  • 跨平台移动和Web应用

使用建议

  • 需要手动处理数据分组
  • 自定义可能会增加复杂性
  • 性能取决于列表大小
  • 有限的内置动画
  • 未针对超大数据集进行优化
  • 需要仔细的状态管理

原始 README

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

Notice: 2.0.0 has break changing

  • The header sticky will use flutter_list_view to implement
  • Refresh control will construct by user, like pull_to_refresh
SectionView<AlphabetHeader<CountryModel>, CountryModel>(
  source: _filterCountries,
  onFetchListData: (header) => header.items,
  enableSticky: true,
  alphabetAlign: Alignment.center,
  alphabetInset: const EdgeInsets.all(4.0),
  headerBuilder: getDefaultHeaderBuilder((d) => d.alphabet),
  alphabetBuilder: getDefaultAlphabetBuilder((d) => d.alphabet),
  tipBuilder: getDefaultTipBuilder((d) => d.alphabet),
  refreshBuilder: (child) {
    return SmartRefresher(
        enablePullDown: true,
        enablePullUp: false,
        header: const WaterDropHeader(),
        controller: _refreshController,
        onRefresh: _onRefresh,
        child: child);
  },
  itemBuilder:
      (context, itemData, itemIndex, headerData, headerIndex) {
    return Padding(
      padding: const EdgeInsets.only(right: 12.0),
      child: ListTile(
          title: Text(itemData.name),
          trailing: Text(itemData.phoneCode)),
    );
  },
),

Features

  1. Show with section view
  2. Alphabet support
  3. Refresh support

Screen

Usage

Firstly, you can construct data like

List<GroupModel> data = [
    GroupModel(name: "Group 1", items: [
      ItemModel(name: "Item 1-1"),
      ItemModel(name: "Item 1-2"),
      ItemModel(name: "Item 1-3"),
      ItemModel(name: "Item 1-4"),
      ItemModel(name: "Item 1-5"),
    ]),
    GroupModel(name: "Group 2", items: [
      ItemModel(name: "Item 2-1"),
      ItemModel(name: "Item 2-2"),
      ItemModel(name: "Item 2-3"),
      ItemModel(name: "Item 2-4"),
      ItemModel(name: "Item 2-5"),
    ]),
    GroupModel(name: "Group 3", items: [
      ItemModel(name: "Item 3-1"),
      ItemModel(name: "Item 3-2"),
      ItemModel(name: "Item 3-3"),
      ItemModel(name: "Item 3-4"),
      ItemModel(name: "Item 3-5"),
    ]),
  ];

After that, you can put code into you project like as below

SectionView<GroupModel, ItemModel>(
  source: data,
  onFetchListData: (header) => header.items,
  headerBuilder: getDefaultHeaderBuilder((d) => d.name,
      bkColor: Colors.green,
      style:
          const TextStyle(fontSize: 18, color: Colors.white)),
  itemBuilder:
      (context, itemData, itemIndex, headerData, headerIndex) =>
          ListTile(
            title: Text(itemData.name),
          )),

Additional information

If you want to custom your UI, please follow /example/lib/fullSectionList.dart

Todo

  • Provide tailer load more functionality
  • Provide programaticly invoke onRefresh.

所属分类

依赖

依赖清单 1 项

源码仓库

使用此插件的项目

暂无相关数据。