Search packages, repositories and app categories

overlapping_panels cover
Package detailsv0.0.3

overlapping_panels

Inspired by Discord's mobile app navigation. Add left and right panels to your app with gestures to reveal panels and callbacks to listen for reveals.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
27
Likes
56
Pub points
150

Install package

flutter pub add overlapping_panels

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

OverlappingPanels is a Flutter package that enables developers to implement left and right navigation panels inspired by Discord's mobile interface. It supports gesture-based panel reveal animations and provides callbacks to monitor panel state changes. Ideal for apps requiring intuitive, swipeable side navigation with smooth transitions across multiple platforms including Android, iOS, Web, macOS, Windows, and Linux.

Use cases

  • Mobile app navigation
  • Chat app interfaces
  • Swipeable side menus
  • Multi-panel layouts
  • Gesture-driven UIs

Key features

  • Gesture-triggered panel reveals
  • Callback support for panel states
  • Left and right panel support
  • Cross-platform compatibility
  • Smooth animation transitions
  • Discord-inspired design

Suitable for

  • Developers building chat apps
  • UI designers seeking modern navigation
  • Apps needing swipeable side panels
  • Cross-platform Flutter projects
  • Interactive mobile interfaces

Considerations

  • May require custom styling for unique designs
  • Performance depends on panel content complexity
  • Limited to two panels (left/right)
  • Not suitable for complex nested navigation
  • Requires careful handling of overlapping touch events

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

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);
  },
)

Categories

Source repository

Projects using this package