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

draggable_scrollbar 封面
插件详情v0.1.0

draggable_scrollbar

一个可拖动的滚动条,用于快速浏览垂直列表。还可选择在滚动滑块旁边显示标签,以提供当前项的信息。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
8120
喜欢数
404
Pub 分数
140

安装插件

flutter pub add draggable_scrollbar

插件介绍

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

draggable_scrollbar 包通过提供一个可拖动的滚动条以及一个可选的标签来增强 Flutter 中垂直列表的导航体验,该标签会显示当前可见项目的相关信息。用户可以通过拖动滚动条滑块快速滚动长列表,从而提升可用性和可访问性。标签会动态更新以反映当前位置,提供视觉反馈。该包专为与 ListView 及其他可滚动控件无缝集成而设计,支持所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux。

适合场景

  • 快速浏览长列表
  • 增强可滚动内容的可访问性
  • 提升数据密集型应用中的用户体验
  • 在滚动时提供视觉反馈
  • 自定义垂直列表中的滚动行为

主要特点

  • 可拖动的滚动条滑块
  • 动态标签,显示当前项目信息
  • 跨平台支持
  • 与 ListView 的轻松集成
  • 可自定义外观
  • 平滑滚动交互

适合对象

  • 具有长垂直列表的应用程序
  • 面向可访问性的应用程序
  • 数据密集型仪表板
  • 需要直观滚动的用户界面
  • 寻求增强滚动用户体验的开发者

使用建议

  • 可能需要额外的样式设置以获得最佳外观
  • 在小屏幕上,标签位置可能需要调整
  • 对超大列表的性能影响
  • 仅限垂直滚动
  • 需要正确的上下文以进行标签文本渲染

原始 README

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

Flutter Community: draggable_scrollbar

Draggable Scrollbar

Pub

A scrollbar that can be dragged for quickly navigation through a vertical list. Additionaly it can show label next to scrollthumb with information about current item, for example date of picture created

Usage

You can use one of the three built-in scroll thumbs, or you can create a custom thumb for your own app!

You can play with all of these examples by running the app found in the example folder.

Example

Semicircle Thumb
DraggableScrollbar.semicircle(
  controller: myScrollController,
  child: GridView.builder(
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
      crossAxisCount: 5,
    ),
    controller: myScrollController,
    padding: EdgeInsets.zero,
    itemCount: 1000,
    itemBuilder: (context, index) {
      return Container(
        alignment: Alignment.center,
        margin: EdgeInsets.all(2.0),
        color: Colors.grey[300],
      );
    },
  ),
);
Arrows thumb + label
DraggableScrollbar.arrows(
  labelTextBuilder: (double offset) => Text("${offset ~/ 100}"),
  controller: myScrollController,
  child: ListView.builder(
    controller: myScrollController,
    itemCount: 1000,
    itemExtent: 100.0,
    itemBuilder: (context, index) {
      return Container(
        padding: EdgeInsets.all(8.0),
        child: Material(
          elevation: 4.0,
          borderRadius: BorderRadius.circular(4.0),
          color: Colors.purple[index % 9 * 100],
          child: Center(
            child: Text(index.toString()),
          ),
        ),
      );
    },
  ),
);
Rounded Rectangle Thumb
DraggableScrollbar.rrect(
  controller: myScrollController,
  child: ListView.builder(
    controller: myScrollController,
    itemCount: 1000,
    itemExtent: 100.0,
    itemBuilder: (context, index) {
      return Container(
        padding: EdgeInsets.all(8.0),
        child: Material(
          elevation: 4.0,
          borderRadius: BorderRadius.circular(4.0),
          color: Colors.green[index % 9 * 100],
          child: Center(
            child: Text(index.toString()),
          ),
        ),
      );
    },
  ),
);
Custom
DraggableScrollbar(
  controller: myScrollController,
  child: ListView.builder(
    controller: myScrollController,
    itemCount: 1000,
    itemExtent: 100.0,
    itemBuilder: (context, index) {
      return Container(
        padding: EdgeInsets.all(8.0),
        child: Material(
          elevation: 4.0,
          borderRadius: BorderRadius.circular(4.0),
          color: Colors.cyan[index % 9 * 100],
          child: Center(
            child: Text(index.toString()),
          ),
        ),
      );
    },
  ),
  heightScrollThumb: 48.0,
  backgroundColor: Colors.blue,
  scrollThumbBuilder: (
    Color backgroundColor,
    Animation<double> thumbAnimation,
    Animation<double> labelAnimation,
    double height, {
    Text labelText,
  }) {
    return FadeTransition(
      opacity: thumbAnimation,
      child: Container(
        height: height,
        width: 20.0,
        color: backgroundColor,
      ),
    );
  },
);

所属分类

源码仓库

使用此插件的项目