infinity_menu 2.0.1 copy "infinity_menu: ^2.0.1" to clipboard
infinity_menu: ^2.0.1 copied to clipboard

An infinitely customizable Menu for flutter apps with support for nested menu and much more.

∞ infinity_menu #

An infinitely customizable Menu for flutter apps with support for nested menu and much more.

Installation #

From pub.dev

Add this to your pubspec.yaml

dependencies:
  infinity_menu: ^2.0.1

Or, From Git repo

dependencies:
  infinity_menu:
    git:
      url: https://github.com/Ragibn5/dart-flutter-packages.git
      path: infinity_menu
      ref: infinity_menu-2.0.1

✨ Features #

  • ♾️ Infinite nesting — nest submenus to any depth.
  • 🎨 UI-agnostic — you control how everything looks via builder callbacks.
  • 📦 Type-safe — carry any data type through your menu and get it back as a strongly typed value on selection.
  • 🔀 Wide compatibility — works with Flutter 3.10.6+.

📸 Preview #

Home screen Menu selected
Deep nesting - level 1 Deep nesting - level 2 Deep nesting - level 3
Settings menu Settings submenu

🚀 Get Started #

1. Define your menu data #

Build your menu tree with MenuData and MenuItemData. Nest as deep as you want — just set subMenuData.

import 'package:infinity_menu/infinity_menu.dart';

final menuData = MenuData<String>(
  menuItems: [
    MenuItemData<String>(
      data: 'theme',
      itemTitle: 'Theme',
      subMenuData: MenuData<String>(
        menuItems: [
          MenuItemData(data: 'light', itemTitle: 'Light', onItemAction: _onSelect),
          MenuItemData(data: 'dark', itemTitle: 'Dark', onItemAction: _onSelect),
        ],
      ),
    ),
    MenuItemData(data: 'settings', itemTitle: 'Settings', onItemAction: _onSelect),
  ],
);

2. Present the menu #

Drop an InfinityMenu into any widget — bottom sheet, popup, dialog, wherever. You control how each item looks via menuItemBuilder.

showModalBottomSheet(
  context: context,
  builder: (_) => InfinityMenu<String>(
    menuData: menuData,
    menuItemBuilder: (index, size, item) => ListTile(
      title: Text(item.itemTitle),
      trailing: item.subMenuData != null ? Icon(Icons.chevron_right) : null,
    ),
    separatorBuilder: (_, __, ___) => Divider(height: 1),
    menuHeaderBuilder: (_, parent) => Padding(
      padding: EdgeInsets.all(8),
      child: Text(parent?.itemTitle ?? 'Menu', style: TextStyle(fontWeight: FontWeight.bold)),
    ),
    onSubmenuRequest: (ctx, submenu, parent) => _openMenu(ctx, submenu),
  ),
);

3. Recursively open submenus #

When a user taps an item with a submenu, onSubmenuRequest fires. Just call your own function again — the recursion handles the rest.

void _openMenu(BuildContext context, MenuData<String> submenu) {
  showModalBottomSheet(
    context: context,
    builder: (_) => InfinityMenu<String>(
      menuData: submenu,
      menuItemBuilder: (index, size, item) => ListTile(title: Text(item.itemTitle)),
      onSubmenuRequest: (ctx, sub, parent) => _openMenu(ctx, sub),
    ),
  );
}

📦 API #

All exported components from package:infinity_menu/infinity_menu.dart:

Component Description
InfinityMenu<D> The main widget. Renders a MenuData<D> as a list, handling tap feedback, item actions, and submenu dispatch.
MenuData<D> Holds a list of MenuItemData<D> items and a MenuLayoutConfig.
MenuItemData<D> A single menu item — title, optional icon, optional payload D, optional submenu, optional tap callback.
IconFromIconData Icon variant — wraps a Flutter IconData.
IconFromPath Icon variant — wraps an asset path string.
MenuLayoutConfig Layout options — shrink wrap, padding, scroll physics, selection feedback.
OpacityFeedbackConfig Tap feedback — briefly dims the tapped item.
OverlayFeedbackConfig Tap feedback — briefly shows a colored overlay on the tapped item.

🧪 Example #

See example.dart for a complete runnable example, or demo/ for a standalone Flutter project.


0
likes
160
points
13
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

An infinitely customizable Menu for flutter apps with support for nested menu and much more.

Homepage
Repository (GitHub)
View/report issues

License

BSD-3-Clause (license)

Dependencies

flutter

More

Packages that depend on infinity_menu