voo_navigation 0.0.3
voo_navigation: ^0.0.3 copied to clipboard
A comprehensive, adaptive navigation package for Flutter that automatically adjusts to different screen sizes and platforms with Material 3 design.
VooNavigation π§ #
A comprehensive, adaptive navigation package for Flutter that automatically adjusts to different screen sizes and platforms with Material 3 design.
β¨ Features #
-
π― Fully Adaptive: Automatically switches between navigation types based on screen size
- Bottom Navigation (< 600px)
- Navigation Rail (600-840px)
- Extended Navigation Rail (840-1240px)
- Navigation Drawer (> 1240px)
-
π¨ Material 3 Design: Full compliance with latest Material Design guidelines
-
π Rich Navigation Items: Badges, dropdowns, custom icons, tooltips
-
β¨ Beautiful Animations: Smooth transitions with customizable duration and curves
-
π οΈ Extensive Customization: Colors, shapes, elevations, headers, footers
-
βΏ Accessibility: Full semantic labels and focus management
-
π± Platform Agnostic: Works seamlessly across all platforms
π¦ Installation #
Add to your pubspec.yaml:
dependencies:
voo_navigation:
path: packages/ui/voo_navigation # For local development
π Quick Start #
import 'package:voo_navigation/voo_navigation.dart';
// Define navigation items
final navigationItems = [
VooNavigationItem(
id: 'home',
label: 'Home',
icon: Icons.home_outlined,
selectedIcon: Icons.home,
route: '/home',
badgeCount: 3, // Shows badge with count
),
VooNavigationItem(
id: 'search',
label: 'Search',
icon: Icons.search,
route: '/search',
showDot: true, // Shows notification dot
badgeColor: Colors.red,
),
];
// Create configuration
final config = VooNavigationConfig(
items: navigationItems,
selectedId: 'home',
enableAnimations: true,
enableHapticFeedback: true,
onNavigationItemSelected: (itemId) {
// Handle navigation
},
);
// Build adaptive scaffold
@override
Widget build(BuildContext context) {
return VooAdaptiveScaffold(
config: config,
body: YourContentWidget(),
);
}
π― Navigation Types #
Bottom Navigation (Mobile) #
Automatically used on screens < 600px wide. Perfect for mobile devices.
Navigation Rail (Tablet) #
Used on screens 600-840px. Ideal for tablets in portrait mode.
Extended Navigation Rail (Small Laptop) #
Used on screens 840-1240px. Shows labels alongside icons.
Navigation Drawer (Desktop) #
Used on screens > 1240px. Full-featured drawer with sections and headers.
π οΈ Customization #
Navigation Items #
VooNavigationItem(
id: 'unique_id',
label: 'Display Label',
icon: Icons.icon_outlined,
selectedIcon: Icons.icon, // Optional different icon when selected
// Badges
badgeCount: 5, // Shows "5"
badgeText: 'NEW', // Custom badge text
showDot: true, // Simple notification dot
badgeColor: Colors.red, // Custom badge color
// Navigation
route: '/route', // Route to navigate to
destination: CustomWidget(), // Or custom widget
onTap: () {}, // Custom callback
// Customization
tooltip: 'Custom tooltip',
iconColor: Colors.blue,
selectedIconColor: Colors.green,
labelStyle: TextStyle(...),
isEnabled: true,
isVisible: true,
sortOrder: 0,
// Children for sections
children: [...], // Nested items for dropdowns
isExpanded: true, // Start expanded
)
Configuration Options #
VooNavigationConfig(
// Core
items: [...],
selectedId: 'current_id',
// Behavior
isAdaptive: true, // Auto-adapt to screen size
forcedNavigationType: NavigationType.rail, // Override adaptive
// Animation
enableAnimations: true,
animationDuration: Duration(milliseconds: 300),
animationCurve: Curves.easeInOut,
// Appearance
railLabelType: NavigationRailLabelType.selected,
useExtendedRail: true,
showNavigationRailDivider: true,
centerAppBarTitle: false,
// Colors
backgroundColor: Colors.white,
navigationBackgroundColor: Colors.grey[50],
selectedItemColor: Colors.blue,
unselectedItemColor: Colors.grey,
indicatorColor: Colors.blue.withOpacity(0.1),
// Custom Widgets
drawerHeader: CustomHeader(),
drawerFooter: CustomFooter(),
appBarLeading: CustomLeading(),
appBarActions: [...],
floatingActionButton: FAB(),
// Callbacks
onNavigationItemSelected: (itemId) {...},
)
π± Responsive Breakpoints #
The package uses Material 3 breakpoints by default:
| Breakpoint | Width | Navigation Type |
|---|---|---|
| Compact | < 600px | Bottom Navigation |
| Medium | 600-840px | Navigation Rail |
| Expanded | 840-1240px | Extended Rail |
| Large | 1240-1440px | Navigation Drawer |
| Extra Large | > 1440px | Navigation Drawer |
You can customize breakpoints:
VooNavigationConfig(
breakpoints: [
VooBreakpoint(
minWidth: 0,
maxWidth: 500,
navigationType: VooNavigationType.bottomNavigation,
columns: 4,
margin: EdgeInsets.all(16),
gutter: 8,
),
// Add more custom breakpoints
],
)
π¨ Theming #
The package fully integrates with your app's theme:
MaterialApp(
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
useMaterial3: true,
navigationBarTheme: NavigationBarThemeData(...),
navigationRailTheme: NavigationRailThemeData(...),
drawerTheme: DrawerThemeData(...),
),
)
π Badges & Notifications #
Show badges on navigation items:
// Count badge
VooNavigationItem(
badgeCount: 10, // Shows "10"
)
// Custom text badge
VooNavigationItem(
badgeText: 'NEW',
badgeColor: Colors.orange,
)
// Simple dot indicator
VooNavigationItem(
showDot: true,
badgeColor: Colors.red,
)
π Sections & Groups #
Organize items into sections:
VooNavigationItem.section(
label: 'Communication',
children: [
VooNavigationItem(id: 'messages', ...),
VooNavigationItem(id: 'email', ...),
],
isExpanded: true,
)
π Animations #
All transitions are animated by default:
- Navigation type changes
- Item selection
- Badge updates
- Drawer/rail expansion
- FAB position changes
Control animations:
VooNavigationConfig(
enableAnimations: false, // Disable all animations
animationDuration: Duration(milliseconds: 500),
animationCurve: Curves.elasticOut,
)
π± Example App #
Check out the example app for a complete demonstration:
cd packages/ui/voo_navigation/example
flutter run
ποΈ Architecture #
The package follows clean architecture principles:
lib/
βββ src/
β βββ domain/
β β βββ entities/ # Core business entities
β βββ data/
β β βββ models/ # Data models
β βββ presentation/
β βββ organisms/ # Complex components
β βββ molecules/ # Composite components
β βββ atoms/ # Basic components
β βββ utils/ # Utilities
π§ͺ Testing #
Run tests:
flutter test
π License #
This package is part of the VooFlutter ecosystem.
π€ Contributing #
Contributions are welcome! Please read our contributing guidelines and follow the code style defined in rules.md.
π Issues #
Report issues on the GitHub repository.
Built with β€οΈ by the VooFlutter team