NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2545 most downloaded on pub.dev
A highly customizable bottom navigation bar for Flutter. Includes 17 prebuilt styles but can also be used with your custom style.
Last release 1 months ago
10 Aug 2026
Release timing varies
gaps range from 2 weeks to 7 months
Nearly every release is documented
notes for 38 of 38 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
48 releases · first in 2022
1d70e71 : Bump go_router from 17.1.0 to 17.2.0 (dependabot[bot]) #226
One column per quarter.
8fad3e2 : Version 6.3.1 (jb3rndt)
92d1e25 : Add changelog note (jb3rndt)
c2a73df : Bump go_router from 16.3.0 to 17.0.0 ( #220 ) (dependabot[bot]) #220
45b1b57 : add type annotation (jb3rndt)
b8a74ab : add regression test for #205 (jb3rndt)
1679651 : change project_type and rename test file (jb3rndt)
880e65e : Remove deprecated use of onWillPop (jb3rndt) #187
NavBarOverlap.none() as the default for navBarOverlap (Jannis Berndt) #187navBarHeight use the height of each style instead (jb3rndt) #187hideOnScrollVelocity to x (x != 0) to make the NavBar disappear after x pixels have been scrolled (and reappear respectively)SelectedTabPressConfig, which is responsible for any configuration when the selected tab is pressed again.
SelectedTabPressConfig.popAction allows to specify how many screens of the current tab should be popped if the tab is pressed againSelectedTabPressConfig.scrollToTop enables automatically scrolling the tab content to top if the current tab is pressed again. This requires a ScrollController on each PersistentTabConfig.scrollController for each tab this should be activated for.SelectedTabPressConfig.onPressed is a callback that gets executed whenever the current tab is pressed again. I also provides an argument whether there are any pages pushed to the tab.popAllScreensOfCurrentTabAnimatedIconWrapper (see README for more)navBarOverlap to NavBarOverlap.none() (previously was NavBarOverlap.full())selectedTabContext. Use the list of your tabs instead to get the current tab context like so: tabs[controller.index].navigatorConfig.navigatorKey.currentContextPersistentTabController.onIndexChanged. Use PersistentTabController.listen instead.popAllScreensOnTapAnyTabs with keepNavigatorHistory. The meaning (and default value) of this parameter is thus inverted. To migrate, flip the boolean value for that parameter if you use it.popAllScreensOnTapOfSelectedTab and popActionScreens into the SelectedTabPressConfig.popAction.
SelectedTabPressConfig.popAction to PopActionType.all to pop all screens of the selected tab if it is pressed againSelectedTabPressConfig.popAction to PopActionType.single to pop a single screen of the selected tab if it is pressed againSelectedTabPressConfig.popAction to PopActionType.none to do nothing if it the selected tab pressed againonSelectedTabPressWhenNoScreensPushed with SelectedTabPressConfig.onPressed. The onPressed parameter informs you whether any pages are currently pushed to that tab.navBarHeight parameter. Use the height parameter of each style instead if needed. height is not mandatory, so by default no specific height is set. Use kBottomNavigationBarHeight if you want the default previous behavior.d5762a4 : Update release script (jb3rndt)
d074da4 : Improve documentation on the historyLength ( #138 ) (jb3rndt)
Only dispose PersistentTabController if it is automatically created. If you pass your own, you are responsible to dispose it manually.
popAllScreensOnTapOfSelectedTab and onSelectedTabPressWhenNoScreensPushed did not work properly when an initialRoute was set for that tab
Mark ItemConfig.color and filter as deprecated
Navbar got clipped and thus didnt show a boxShadow
Navigator.copyWith didn't properly copy the navigatorKey
canPop: true when all child navigators are clear and the initial tab is selected to the give pop control to the ancestors or correctly pop/close the app if no parent PopScope exists (thus maintaining natural PopScope behavior)Fix deprecation of colorScheme.background
Easier and less error-prone usage api (MIGRATION GUIDE)
Rename ItemConfig color attributes
Nothing published for this version
Make ItemConfig inactiveIcon of Type Widget
Make page switching transition rtl compatible
Add animatedTabBuilder to customize the transition when switching tabs
animatedTabBuilder to customize the transition when switching tabsTab history when using android back button
_animateTabTransition on ScreenTransitionAnimation### Added - Support drawerEdgeDragWidth
drawerEdgeDragWidthA drawer can be passed to the PersistentTabView to be usable in every tab
Migration Guide Link in the Readme
itemAnimationProperties, neumorphicProperties and navBarDecoration now have to be applied to the NavBar Widget directly
itemAnimationProperties, neumorphicProperties and navBarDecoration now have to be applied to the NavBar Widget directlyPersistenTabView.custom (use PersistentTabView instead) constructorbackgroundColor now changes the color of the backgroundNavBarOverlap replaces the buttomScreenMarginCupertinoPageScaffold with ScaffoldRemove label padding in simple style
Fix text color issues with style 3
Fix cast error when using onWillPop with handleAndroidBackButtonPress: false
onWillPop with handleAndroidBackButtonPress: falseUsing bottom item TextStyle on style3 caused cast error
selectedTabScreenContext returned a wrong context after visiting the tabs the first time
selectedTabScreenContext returned a wrong context after visiting the tabs the first timeUsing one border side in NavbarDecoration caused an error (see \#21)
Change NavBarPadding.fromLTRB to use correct order
NavBarPadding.fromLTRB to use correct orderBreaking Change: The CustomWidgetRouteAndNavigatorSettings.navigatorObservers are now a list of lists of NavigatorObservers, so each tab has its own l…
CustomWidgetRouteAndNavigatorSettings.navigatorObservers are now a list of lists of NavigatorObservers, so each tab has its own list of NavigatorObervers. See the attribute for more information and an exampleSupport Flutter 3.0.0 without triggering warnings (see _ambiguate function for more)
_ambiguate function for more)Remove label top padding in most styles because it broke layout for custom image icons (see \#20)
Add navBarHeight to PersistentTabView.custom
navBarHeight to PersistentTabView.customFix animation repeating when dependencies change
### Added - Re-add example - Add more documentation
Fixed empty tabs when fastly switching tabs with animations enabled
Fix issue with navbarDecoration.borderRadius being null but expected to not be null by styles 15 and 16
navbarDecoration.borderRadius being null but expected to not be null by styles 15 and 16PersistentTabView.custom passes hideNavigationBarWhenKeyboardShows to super
PersistentTabView.custom passes hideNavigationBarWhenKeyboardShows to superresizeToAvoidBottomInset defaults to true as per docshideNavigationBarWhenKeyboardShows no longer depends on resizeToAvoidBottomInset to work properlyRespect background color config in navbar
### Fixed - Remove old debugging print
Hotfix for popAllScreensOnTapOfSelectedTab of PersistentTabView.custom
popAllScreensOnTapOfSelectedTab of PersistentTabView.customPersistentTabView.custom now also needs the itemsnavBarEssentials.onItemSelected(index) to trigger navigator stack clearingcustomWidget now is a builder that receives navBarEssentialspopAllScreensOnTapOfSelectedTab work, specify your onItemSelected function of the CustomWidget like this:PersistentTabView.custom now supports popAllScreensOnTapOfSelectedTab
PersistentTabView.custom now supports popAllScreensOnTapOfSelectedTabCutsomWidgetRouteAndNavigatorSettings got renamed to CustomWidgetRouteAndNavigatorSettingsRepublish package to persistent\_bottom\_nav\_bar\_v2
Your coding agent can read these notes before it upgrades. Set up the MCP server →