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

scrollable_panel 封面
插件详情v0.4.1

scrollable_panel

拖动以展开,然后可以滚动内容。类似于 Google 地图应用中的“附近地点”面板。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
84
喜欢数
62
Pub 分数
150

安装插件

flutter pub add scrollable_panel

插件介绍

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

一个 Flutter 包,可实现底部面板的拖动打开和滚动,模仿 Google 地图应用中‘附近地点’面板的行为。它提供流畅的拖动展开交互,并支持在展开的面板内滚动内容。非常适合以紧凑、互动的形式显示详细信息或列表。该包兼容 Android、iOS、Web、macOS、Windows 和 Linux 平台。

适合场景

  • 在地图应用中显示位置详细信息
  • 显示附近景点列表
  • 创建可扩展的信息面板
  • 实现可折叠的内容部分
  • 增强用户与可拖动底部面板的交互体验

主要特点

  • 拖动展开手势支持
  • 内置的可滚动内容区域
  • 跨平台兼容性
  • 平滑的动画过渡
  • 可自定义的面板高度和行为
  • 适用于所有屏幕尺寸的响应式设计

适合对象

  • 地图和基于位置的应用程序
  • 内容丰富的底部弹出层
  • 需要可展开面板的用户界面
  • 寻求原生底部表单体验的开发者
  • 需要直观手势导航的应用程序

使用建议

  • 可能需要额外的样式设置以实现自定义视觉效果
  • 处理超大数据集时的性能影响
  • 复杂动画的自定义选项有限
  • 需要仔细处理嵌套的滚动视图
  • 不适合用于简单的静态内容展示

原始 README

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

scrollable_panel

pub package

drag to expand and then can scroll contents. similar "Nearby spots" panel on google map app.

https://pub.dev/packages/scrollable_panel

Panel Properties

Properties Data Type Description
builder ScrollableWidgetBuilder builder for inner panel view. ScrollableWidgetBuilder type define in draggable_scrollable_sheet.dart. provide PanelScrollController that extends ScrollController.
controller PanelController control panel from some interaction like button.
defaultPanelState PanelState set default panel state. (default value PanelState.open)
defaultPanelSize double set default panel height factor (default value 0.25)
minPanelSize double set minimum panel height factor. (default value 0)
maxPanelSize double set maximum panel height factor. (default value 1.0)
onOpen VoidCallback if non-null, this callback is called when panel state become open
onClose VoidCallback if non-null, this callback is called when panel state become close
onExpand VoidCallback if non-null, this callback is called when panel state become expand

PanelController actions

Action Data Type Description
open void open panel. panel animate to defaultPanelSize.
expand void expand panel. panel animate to maxPanelSize.
close void close panel. panel animate to minPanelSize.
animateTo double animate panel to value height.

Usage

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  PanelController _panelController = PanelController();
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('scrollable panel'),
      ),
      body: Stack(
        children: <Widget>[
          InkWell(
            onTap: () {
              _panelController.toDefault();
            },
            child: _FirstView(),
          ),
          ScrollablePanel(
            controller: _panelController,
            builder: (context, controller) {
              return SingleChildScrollView(
                controller: controller,
                child: _SecondView(),
              );
            },
          ),
        ],
      ),
    );
  }
}

TODO

  • ~write README.md and dartdoc~
  • ~null-safety support~
  • ~write test code~
  • add List<double> anchor property to use multi snapping point.

所属分类

源码仓库

使用此插件的项目

暂无相关数据。