Flutter Fancy Bottom NavigationÂ
Fancy Flutter Bottom Navigation Bar library is very easy to use and nice animations, library is easy to customize as per need.
Use this package as a library
1. Depend on it
Add this to your package’s pubspec.yaml file:
dependencies: fancy_bottom_navigation: ^0.3.2
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:fancy_bottom_navigation/fancy_bottom_navigation.dart';
Getting Started
Add the plugin (pub coming soon):
Limitations
For now this is limited to more than 1 tab, and less than 5. So 2-4 tabs.
Basic Usage
Adding the widget
bottomNavigationBar: FancyBottomNavigation( tabs: [ TabData(iconData: Icons.home, title: "Home"), TabData(iconData: Icons.search, title: "Search"), TabData(iconData: Icons.shopping_cart, title: "Basket") ], onTabChangedListener: (position) { setState(() { currentPage = position; }); }, )
TabData
iconData -> Icon to be used for the tab title -> String to be used for the tab onClick -> Optional function to be used when the circle itself is clicked, on an active tab
Attributes
required
tabs -> List of TabData
objects<br/> onTabChangedListener -> Function to handle a tap on a tab, receives int position
optional
initialSelection -> Defaults to 0<br/> circleColor -> Defaults to null, derives from Theme
<br/> activeIconColor -> Defaults to null, derives from Theme
<br/> inactiveIconColor -> Defaults to null, derives from Theme
<br/> taxtColor -> Defaults to null, derives from Theme
<br/> barBackgroundColor -> Defaults to null, derives from Theme
<br/> key -> Defaults to null<br/>
Theming
The bar will attempt to use your current theme out of the box, however you may want to theme it. Here are the attributes:
Example of Implementation
import 'package:example/second_page.dart'; import 'package:fancy_bottom_navigation/fancy_bottom_navigation.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.deepOrange, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int currentPage = 0; GlobalKey bottomNavigationKey = GlobalKey(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Fancy Bottom Navigation"), ), body: Container( decoration: BoxDecoration(color: Colors.white), child: Center( child: _getPage(currentPage), ), ), bottomNavigationBar: FancyBottomNavigation( tabs: [ TabData( iconData: Icons.home, title: "Home", onclick: () { final FancyBottomNavigationState fState = bottomNavigationKey.currentState; fState.setPage(2); }), TabData( iconData: Icons.search, title: "Search", onclick: () => Navigator.of(context) .push(MaterialPageRoute(builder: (context) => SecondPage()))), TabData(iconData: Icons.shopping_cart, title: "Basket") ], initialSelection: 1, key: bottomNavigationKey, onTabChangedListener: (position) { setState(() { currentPage = position; }); }, ), drawer: Drawer( child: ListView( children: <Widget>[Text("Hello"), Text("World")], ), ), ); } _getPage(int page) { switch (page) { case 0: return Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ Text("This is the home page"), RaisedButton( child: Text( "Start new page", style: TextStyle(color: Colors.white), ), color: Theme.of(context).primaryColor, onPressed: () { Navigator.of(context).push( MaterialPageRoute(builder: (context) => SecondPage())); }, ), RaisedButton( child: Text( "Change to page 3", style: TextStyle(color: Colors.white), ), color: Theme.of(context).accentColor, onPressed: () { final FancyBottomNavigationState fState = bottomNavigationKey.currentState; fState.setPage(2); }, ) ], ); case 1: return Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ Text("This is the search page"), RaisedButton( child: Text( "Start new page", style: TextStyle(color: Colors.white), ), color: Theme.of(context).primaryColor, onPressed: () { Navigator.of(context).push( MaterialPageRoute(builder: (context) => SecondPage())); }, ) ], ); default: return Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ Text("This is the basket page"), RaisedButton( child: Text( "Start new page", style: TextStyle(color: Colors.white), ), color: Theme.of(context).primaryColor, onPressed: () {}, ) ], ); } } }
Pub Dev Link
Github Link