BottomNavyBar
A beautiful and animated bottom navigation. The navigation bar use your current theme, but you are free to customize it.
Preview | PageView |
---|---|
Use this package as a library
1. Depend on it
Add this to your package’s pubspec.yaml file:
dependencies: bottom_navy_bar: ^5.5.0
2. Install it
You can install packages from the command line:
with Flutter:
$ flutter pub get
Alternatively, your editor might support flutter pub get
. Check the docs for your editor to learn more.
3. Import it
Now in your Dart code, you can use:
import 'package:bottom_navy_bar/bottom_navy_bar.dart';
Customization (Optional)
BottomNavyBar
iconSize
– the item icon’s sizeitems
– navigation items, required more than one item and less than sixselectedIndex
– the current item index. Use this to change the selected item. Default to zeroonItemSelected
– required to listen when a item is tapped it provide the selected item’s indexbackgroundColor
– the navigation bar’s background colorshowElevation
– if false the appBar’s elevation will be removedmainAxisAlignment
– use this property to change the horizontal alignment of the items. It is mostly used when you have ony two items and you want to center the itemscurve
– param to customize the item change’s animationcontainerHeight
– changes the Navigation Bar’s height
BottomNavyBarItem
icon
– the icon of this itemtitle
– the text that will appear next to the icon when this item is selectedactiveColor
– the active item’s background and text colorinactiveColor
– the inactive item’s icon colortextAlign
– property to change the alignment of the item title
Getting Started
Add the dependency in pubspec.yaml
:
dependencies: ... bottom_navy_bar: ^5.5.0
Basic Usage
Adding the widget
bottomNavigationBar: BottomNavyBar( selectedIndex: _selectedIndex, showElevation: true, // use this to remove appBar's elevation onItemSelected: (index) => setState(() { _selectedIndex = index; _pageController.animateToPage(index, duration: Duration(milliseconds: 300), curve: Curves.ease); }), items: [ BottomNavyBarItem( icon: Icon(Icons.apps), title: Text('Home'), activeColor: Colors.red, ), BottomNavyBarItem( icon: Icon(Icons.people), title: Text('Users'), activeColor: Colors.purpleAccent ), BottomNavyBarItem( icon: Icon(Icons.message), title: Text('Messages'), activeColor: Colors.pink ), BottomNavyBarItem( icon: Icon(Icons.settings), title: Text('Settings'), activeColor: Colors.blue ), ], )
Use with PageView and PageController
class _MyHomePageState extends State<MyHomePage> { int _currentIndex = 0; PageController _pageController; @override void initState() { super.initState(); _pageController = PageController(); } @override void dispose() { _pageController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("Nav Bar")), body: SizedBox.expand( child: PageView( controller: _pageController, onPageChanged: (index) { setState(() => _currentIndex = index); }, children: <Widget>[ Container(color: Colors.blueGrey,), Container(color: Colors.red,), Container(color: Colors.green,), Container(color: Colors.blue,), ], ), ), bottomNavigationBar: BottomNavyBar( selectedIndex: _currentIndex, onItemSelected: (index) { setState(() => _currentIndex = index); _pageController.jumpToPage(index); }, items: <BottomNavyBarItem>[ BottomNavyBarItem( title: Text('Item One'), icon: Icon(Icons.home) ), BottomNavyBarItem( title: Text('Item One'), icon: Icon(Icons.apps) ), BottomNavyBarItem( title: Text('Item One'), icon: Icon(Icons.chat_bubble) ), BottomNavyBarItem( title: Text('Item One'), icon: Icon(Icons.settings) ), ], ), ); } }
Example of implementation
import 'package:bottom_navy_bar/bottom_navy_bar.dart'; import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int currentIndex = 0; int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text('You have pushed the button this many times:'), Text( '$_counter', style: Theme.of(context).textTheme.headline4, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), bottomNavigationBar: BottomNavyBar( selectedIndex: currentIndex, showElevation: true, itemCornerRadius: 8, curve: Curves.easeInBack, onItemSelected: (index) => setState(() { currentIndex = index; }), items: [ BottomNavyBarItem( icon: Icon(Icons.apps), title: Text('Home'), activeColor: Colors.red, textAlign: TextAlign.center, ), BottomNavyBarItem( icon: Icon(Icons.people), title: Text('Users'), activeColor: Colors.purpleAccent, textAlign: TextAlign.center, ), BottomNavyBarItem( icon: Icon(Icons.message), title: Text( 'Messages test for mes teset test test ', ), activeColor: Colors.pink, textAlign: TextAlign.center, ), BottomNavyBarItem( icon: Icon(Icons.settings), title: Text('Settings'), activeColor: Colors.blue, textAlign: TextAlign.center, ), ], ), ); } }
Pub Dev Link
Github Link