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

overlapping_panels 封面
插件详情v0.0.3

overlapping_panels

受 Discord 移动应用导航的启发。为您的应用添加左右面板,通过手势显示面板,并提供回调以监听面板的显示。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
27
喜欢数
56
Pub 分数
150

安装插件

flutter pub add overlapping_panels

插件介绍

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

OverlappingPanels 是一个 Flutter 包,可帮助开发者实现受 Discord 移动界面启发的左右导航面板。它支持基于手势的面板揭示动画,并提供回调以监控面板状态变化。适用于需要直观、可滑动侧边导航且在 Android、iOS、Web、macOS、Windows 和 Linux 等多个平台上实现流畅过渡的应用。

适合场景

  • 移动应用导航
  • 聊天应用界面
  • 可滑动的侧边菜单
  • 多面板布局
  • 手势驱动的用户界面

主要特点

  • 手势触发的面板显示
  • 面板状态的回调支持
  • 左右面板支持
  • 跨平台兼容性
  • 流畅的动画过渡
  • 受 Discord 启发的设计

适合对象

  • 开发聊天应用的开发者
  • 寻求现代导航的UI设计师
  • 需要可滑动侧边面板的应用
  • 跨平台 Flutter 项目
  • 交互式移动界面

使用建议

  • 可能需要自定义样式以实现独特设计
  • 性能取决于面板内容的复杂性
  • 限制为两个面板(左/右)
  • 不适合复杂的嵌套导航
  • 需要仔细处理重叠的触摸事件

原始 README

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

Overlapping Panels Pub

Add Discord-like navigation to your app. Demo project here: overlapping_panels_demo

Demo
TODO

This widget does not support navigation events yet. So pressing the back button, does not slide the main panel back into view. This feature will be implemented in the nearest future.

Usage

Simple and straight to the point. Just provide usual widgets for all panels:

class _MyHomePageState extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        OverlappingPanels(
          // Using the Builder widget is not required. You can pass your widget directly. 
          // But to use `OverlappingPanels.of(context)` you need to wrap your widget in a Builder
          left: Builder(builder: (context) {
            return const LeftPage();
          }),
          right: Builder(
            builder: (context) => const RightPage(),
          ),
          main: Builder(
            builder: (context) {
              return const MainPage();
            },
          ),
          onSideChange: (side) {
            setState(() {
              if (side == RevealSide.main) {
                // hide something
              } else if (side == RevealSide.left) {
                // show something
              }
            });
          },
        ),
      ],
    );
  }
}

To be able to reveal a panel with the tap of a button, for example, do:

IconButton(
  icon: const Icon(Icons.menu),
  onPressed: () {
    // This is the main point
    OverlappingPanels.of(context)?.reveal(RevealSide.left);
  },
)

所属分类

源码仓库

使用此插件的项目