navigation_bar_m3e 0.1.1
navigation_bar_m3e: ^0.1.1 copied to clipboard
Material 3 Expressive Navigation Bar for Flutter with token-driven colors, shapes, and badges.
navigation_bar_m3e #
Material 3 Expressive Navigation Bar for Flutter with badges, pill/underline indicators, and token-driven styling.
NavigationBarM3E— wrapper around Flutter'sNavigationBarwith M3E tokensNavigationDestinationM3E— destination data (icon, selectedIcon, label, badge)NavBadgeM3E— small badge/dot utility for icons
All styling is driven by the m3e_design ThemeExtension (M3ETheme).
Monorepo Layout #
packages/
m3e_design/
navigation_bar_m3e/
pubspec.yaml references ../m3e_design.
Usage #
import 'package:navigation_bar_m3e/navigation_bar_m3e.dart';
final items = [
const NavigationDestinationM3E(
icon: Icon(Icons.home_outlined),
selectedIcon: Icon(Icons.home),
label: 'Home',
),
const NavigationDestinationM3E(
icon: Icon(Icons.search),
label: 'Search',
badgeCount: 3,
),
const NavigationDestinationM3E(
icon: Icon(Icons.person),
label: 'Profile',
badgeDot: true,
),
];
NavigationBarM3E(
destinations: items,
selectedIndex: 0,
onDestinationSelected: (i) {},
labelBehavior: NavBarM3ELabelBehavior.onlySelected,
indicatorStyle: NavBarM3EIndicatorStyle.pill, // pill | underline | none
size: NavBarM3ESize.medium,
density: NavBarM3EDensity.regular,
shapeFamily: NavBarM3EShapeFamily.round,
);
Tokens mapping #
- Container:
surfaceContainerHigh - Indicator:
secondaryContainer(color), pill shape by default;underlinestyle uses a bottom border - Selected:
onSecondaryContainer(icon/label) - Unselected:
onSurfaceVariant - Label style:
labelMedium - Heights:
small ≈64dp,medium ≈80dp - Icon size:
24dp
Badges #
Use badgeCount for numeric badges or badgeDot: true for a small dot. Colors default to errorContainer / onErrorContainer and can be overridden via NavBadgeM3E.
Accessibility #
- Provide
semanticLabelper destination (used as tooltip) or on the bar. - Label behavior options: alwaysShow, onlySelected, or alwaysHide.
License #
MIT
Live demo (Gallery) #
Explore this component in the M3E Gallery (GitHub Pages):
https://
To run the Gallery locally:
cd apps/gallery
flutter run -d chrome
Last updated: 2025-10-23
Detailed Guide #
What this package provides #
NavigationBarM3E with M3E tokens for colors and shapes, badges, and adaptive layout behavior.
Installation #
- Monorepo (local path): already configured alongside m3e_design.
- Pub (when published):
dependencies:
navigation_bar_m3e: ^0.1.0
m3e_design: ^0.1.0
Minimum SDK: Dart >=3.5.0; Flutter >=3.22.0.
Dependencies #
- flutter
- m3e_design
Quick start #
int index = 0;
NavigationBarM3E(
selectedIndex: index,
onDestinationSelected: (i) => setState(() => index = i),
destinations: const [
NavigationDestinationM3E(icon: Icon(Icons.home), label: 'Home'),
NavigationDestinationM3E(icon: Icon(Icons.search), label: 'Search'),
NavigationDestinationM3E(icon: Icon(Icons.person), label: 'Profile'),
],
)
Key parameters #
- destinations: List
- selectedIndex: int — Current selection.
- onDestinationSelected: ValueChanged
- badgeBuilder / badgeCount: Optional badges per destination.
- backgroundColor / indicatorColor: Color? — Override token-driven colors.
- height / labelBehavior: Layout tweaks.
Theming with m3e_design #
Colors/shape/typography adapt from the active M3ETheme extension.
Accessibility #
- Labels visible or via semantics; badges have semantics descriptions.
Links #
- Repository: https://github.com/EmilyMoonstone/material_3_expressive/tree/main/packages/navigation_bar_m3e
- Issue tracker: https://github.com/EmilyMonestone/material_3_expressive/issues
- Changelog: ./CHANGELOG.md