persistent_bottom_nav_bar_v2
A highly customizable bottom navigation bar for Flutter. Includes 17 prebuilt styles but can also be used with your custom style.
6.4.0
15K downloads/mo
#2502 most downloaded on pub.dev
jb3rndt/PersistentBottomNavBarV2
What this package is like to depend on
Last release 13 days 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
5 releases in the last 12 months
see the full history below
Release timeline
48 releases · Jan 2022 to Aug 2026
2023
2024
2025
2026
Releases
latest 48-
6.4.010 Aug 2026 -
6.3.222 Mar 2026Release notes
Open source →Fixed
- Do not hide the navbar when returning from a negative scroll offset (e.g. due to BouncingScrollPhysics)
-
6.3.101 Mar 2026Release notes
Open source →Commits
- 92d1e25: Add changelog note (jb3rndt)
- 60828f3: Upgrade example to UIScene (jb3rndt) #224
- 929b40f: Re-add null check for BackdropFilter.filter property (jb3rndt) #224
- 296db84: Bump lints to 6.1.0, source_span to 1.10.2, vm_service to 15.0.2 (jb3rndt) #224
- 0ce1e2f: Run tests on multiple flutter versions (jb3rndt) #224
- f19d238: Version 6.3.1 (jb3rndt)
-
6.3.022 Feb 2026Release notes
Open source →Commits
- c2a73df: Bump go_router from 16.3.0 to 17.0.0 (#220) (dependabot[bot]) #220
- 4e2c97b: Bump go_router from 17.0.0 to 17.0.1 (#221) (dependabot[bot]) #221
- 1cf94f6: Bump go_router from 17.0.1 to 17.1.0 (#222) (dependabot[bot]) #222
- 4598baf: Run pub get and remove unused null check (jb3rndt)
- fc71316: Version 6.3.0 (jb3rndt)
-
6.2.028 Oct 2025Release notes
Open source →Commits
- 45b1b57: add type annotation (jb3rndt)
- 3ad5254: Bump go_router from 15.2.3 to 16.0.0 (#211) (dependabot[bot]) #211
- 73d80a1: Bump go_router from 16.0.0 to 16.1.0 (#212) (dependabot[bot]) #212
- 25ea831: Bump go_router from 16.1.0 to 16.2.5 (#217) (dependabot[bot]) #217
- a29ee7d: Bump go_router from 16.2.5 to 16.3.0 (#218) (dependabot[bot]) #218
- 867d666: Version 6.2.0 (jb3rndt)
-
6.1.022 Jun 2025Release notes
Open source →Commits
- b8a74ab: add regression test for #205 (jb3rndt)
- 497470b: Bump go_router from 15.1.2 to 15.2.0 (#209) (dependabot[bot]) #209
- 33d0878: Bump flutter_lints from 5.0.0 to 6.0.0 (#207) (dependabot[bot]) #207
- a860b75: upgrade go-router to 15.2.3 (jb3rndt)
- ce178dc: move test (jb3rndt)
- 9da2e48: merge and skip tests for changing the number of tabs (jb3rndt)
- 61cf751: Version 6.1.0 (jb3rndt)
-
6.0.118 May 2025Release notes
Open source →Fixed
- If no custom NavigatorKeys were specified, the state of each tab got lost when reloading.
-
6.0.017 May 2025Release notes
Open source →Commits
- eec1e62: Use
NavBarOverlap.none()as the default fornavBarOverlap(Jannis Berndt) #187 - 9a077e3: Moved ItemConfig opacity and filter to NavBarDecoration (jb3rndt) #187
- 9a74969: Merge branch 'master' into v6.0.0 (jb3rndt) #187
- 10822e7: Remove controller onIndexChanged and listen instead (jb3rndt) #187
- 2cb4729: Merge branch 'master' into v6.0.0 (jb3rndt) #187
- df1423f: Merge branch 'v6.0.0' of https://github.com/jb3rndt/PersistentBottomNavBarV2 into v6.0.0 (jb3rndt) #187
- 880e65e: Remove deprecated use of onWillPop (jb3rndt) #187
- 5ba9741: Fix viewInset when resizeToAvoidBottomInset is set to false (jb3rndt) #187
- 5a0492d: Some configs and cleanups (jb3rndt) #187
- 7d17f9c: Generate NavigatorKey directly in config (jb3rndt) #187
- dd15bab: Linter fixes (jb3rndt) #187
- d05bac6: Allow changing the number of tabs at runtime (jb3rndt) #187
- df04fe8: Remove selectedTabContext (jb3rndt) #187
- 36c3fe1: Clean up TabSwitchingView (jb3rndt) #187
- cd71d30: Update changelog and remove deprecated onWillPop (jb3rndt) #187
- 2a6e87f: Add hideOnScrollVelocity to allow hiding the NavBar when scrolling down (jb3rndt) #187
- 01a448a: Update README (jb3rndt) #187
- 7438092: Replaced popAllScreensOnTapAnyTabs with keepNavigatorHistory (jb3rndt) #187
- 6a739ff: Add SelectedTabPressConfig, bundle some scattered settings into that and add scrollToTop functionality (jb3rndt) #187
- b1210da: Add tests for SelectedTabPressConfig (jb3rndt) #187
- 00c690e: Add function to pop all screens of the current tab (jb3rndt) #187
- be9befc: Add previousIndex to controller (jb3rndt) #187
- 4a3245f: Add animated icons (jb3rndt) #187
- 24bd019: Update readme announcing v6 and v6 syntax (jb3rndt) #187
- 657cdae: Remove
navBarHeightuse the height of each style instead (jb3rndt) #187 - e2c60c7: Update flutter version in ci (jb3rndt) #187
- f4ca026: Merge branch 'master' into v6.0.0 (Jannis Berndt) #187
- bb3d585: Update codecov and checkout steps in ci (jb3rndt) #187
- fb29cca: Merge branch 'v6.0.0' of https://github.com/jb3rndt/PersistentBottomNavBarV2 into v6.0.0 (jb3rndt) #187
- 1d72259: Refactor tests (jb3rndt) #187
- f15c5e6: Add missing navigator functions tests (jb3rndt) #187
- e20771a: Fix tab view scaffold to rerender once the animation finished to update the offstage state (jb3rndt) #187
- 635023e: Animate initial animated icon instantly (jb3rndt) #187
- 1e568dd: Add tests for animated icons and navigator configuration (jb3rndt) #187
- d3324c4: Add go_router tests, navbar color filter and PersistentTabConfig.noScreen (jb3rndt) #187
- 22ee14b: Here come the tests (jb3rndt) #187
- 69dfb76: Add tests for gesture navigation and hiding the navigation bar at runtime (jb3rndt) #187
- 6c16f27: Format (jb3rndt) #187
- 8199836: Update pubspec.lock (jb3rndt) #187
- 9ee9654: Fix SwipableTabSwitchingView not disposing pages if statemanagement is disabled and add tests (jb3rndt) #187
- 3c8fbdf: Fix focus node deposing when removing tabs at runtime (jb3rndt) #187
- 7c8d75f: Add tests for screen transition animation (jb3rndt) #187
- 02e0141: Refactor PageTransitionAnimation and add tests (jb3rndt) #187
- 8d55200: Add models tests (jb3rndt) #187
- 2d28549: Add slideUp test (jb3rndt) #187
- 474266a: Change model test to testWidgets (jb3rndt) #187
- 01cd3ae: Add cupertino and material page transition test (jb3rndt) #187
- ea47e31: Add tab switching to navbar style test (jb3rndt) #187
- 30ccb82: Add copywith tests (jb3rndt) #187
- 33e4d3f: Add controller tests (jb3rndt) #187
- ef2208d: Add neumorphic tests (jb3rndt) #187
- 67197c3: Fix neumorphic test (jb3rndt) #187
- 9c1f03d: config updates (jb3rndt)
- 5739e59: Merge branch 'master' into v6.0.0 (jb3rndt) #187
- bab530b: handle changing the tabs (jb3rndt) #187
- fe5724b: fix WidgetBuilder using an old value for the index (jb3rndt) #187
- a4a76a1: fix focus node causing unresponsiveness (jb3rndt) #187
- cfc9cd5: update tests (jb3rndt) #187
- 1d92ac8: Revert "handle changing the tabs" (jb3rndt) #187
- b687853: handle adding/removing tabs better (jb3rndt) #187
- 04f5d44: format (jb3rndt) #187
- e19bffa: make height of nav bar styles optional (jb3rndt) #187
- bd1c3d2: fix analyzer (jb3rndt) #187
- 9b9aee3: make height of neumorphic navbar optional (jb3rndt) #187
- 07d1305: fix tests (jb3rndt) #187
- 439dde0: update test expect method (jb3rndt) #187
- f08bee9: update readme and changelog (jb3rndt) #187
- 4b7d3c4: udgrade flutter version (jb3rndt) #187
- 2d4c34a: Version 6.0.0 (jb3rndt)
Release notes
Open source →Added
- Hide the NavBar on scroll: Set
hideOnScrollVelocityto 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.popActionallows to specify how many screens of the current tab should be popped if the tab is pressed againSelectedTabPressConfig.scrollToTopenables automatically scrolling the tab content to top if the current tab is pressed again. This requires a ScrollController on eachPersistentTabConfig.scrollControllerfor each tab this should be activated for.SelectedTabPressConfig.onPressedis 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.
- Navigator function that pop all screens of the current tab:
popAllScreensOfCurrentTab - Animated Icons: Animate the navigation bar icons by using the provided
AnimatedIconWrapper(see README for more) - PersistentTabController now gives you access to the previousIndex
Breaking Changes
- Change the default of
navBarOverlaptoNavBarOverlap.none()(previously wasNavBarOverlap.full()) - Removed ItemConfig.opacity. Instead, set the opacity on the NavBarDecoration.color directly
- Removed ItemConfig.filter. Use NavBarDecoration.filter instead
- Removed default value of NavBarDecoration.filter
- Removed
selectedTabContext. Use the list of your tabs instead to get the current tab context like so:tabs[controller.index].navigatorConfig.navigatorKey.currentContext - Removed
PersistentTabController.onIndexChanged. UsePersistentTabController.listeninstead. - Replaced
popAllScreensOnTapAnyTabswithkeepNavigatorHistory. The meaning (and default value) of this parameter is thus inverted. To migrate, flip the boolean value for that parameter if you use it. - Combined
popAllScreensOnTapOfSelectedTabandpopActionScreensinto theSelectedTabPressConfig.popAction.- Set
SelectedTabPressConfig.popActiontoPopActionType.allto pop all screens of the selected tab if it is pressed again - Set
SelectedTabPressConfig.popActiontoPopActionType.singleto pop a single screen of the selected tab if it is pressed again - Set
SelectedTabPressConfig.popActiontoPopActionType.noneto do nothing if it the selected tab pressed again
- Set
- Replaced
onSelectedTabPressWhenNoScreensPushedwithSelectedTabPressConfig.onPressed. TheonPressedparameter informs you whether any pages are currently pushed to that tab. - Removed
navBarHeightparameter. Use theheightparameter of each style instead if needed.heightis not mandatory, so by default no specific height is set. UsekBottomNavigationBarHeightif you want the default previous behavior.
Fixed
- Adjusting the number of tabs at runtime threw an error
- The state of each tab was not disposed if stateManagement was true and gestures were enabled
- eec1e62: Use
-
5.4.004 May 2025Release notes
Open source →Commits
- d5762a4: Update release script (jb3rndt)
- cc16928: Create dependabot.yml (Jannis Berndt)
- 1f48dac: Bump go_router from 14.1.2 to 14.3.0 (dependabot[bot]) #184
- 70fa867: Bump flutter_lints from 3.0.1 to 5.0.0 (dependabot[bot]) #185
- c47f088: Merge branch 'master' of https://github.com/jb3rndt/PersistentBottomNavBarV2 (jb3rndt)
- 59c0935: Bump go_router from 14.3.0 to 14.6.1 (dependabot[bot]) #190
- f36f9ee: Bump go_router from 14.6.1 to 14.6.2 (dependabot[bot]) #193
- 4294ac5: Bump go_router from 14.6.2 to 14.8.0 (dependabot[bot]) #198
- b64c172: Update example (jb3rndt)
- 8bbc05e: Bump go_router from 14.8.0 to 15.1.1 (dependabot[bot]) #203
- 81648dd: allow adding and removing tabs at runtime (jb3rndt)
- ff7efdd: Merge branch 'master' of https://github.com/jb3rndt/PersistentBottomNavBarV2 (jb3rndt)
- 7282383: Version 5.4.0 (jb3rndt)
-
5.3.103 Oct 2024Release notes
Open source →Fixed
- Improve documentation on the historyLength (https://github.com/jb3rndt/PersistentBottomNavBarV2/pull/138)
- Fix opacity overriding NavBarDecoration color (https://github.com/jb3rndt/PersistentBottomNavBarV2/issues/181)
-
5.3.006 Jul 2024Release notes
Open source →Fixed
- Only dispose PersistentTabController if it is automatically created. If you pass your own, you are responsible to dispose it manually.
- Handle popAllScreensOnTapAnyTabs correctly
-
5.2.324 Apr 2024Release notes
Open source →Fixed
- popAllScreensOnTapOfSelectedTab and onSelectedTabPressWhenNoScreensPushed did not work properly when an initialRoute was set for that tab
-
5.2.211 Apr 2024Release notes
Open source →Fixed
- NavigatorConfig.initialRoute did not get passed to the respective Navigator
- Mark ItemConfig.color and filter as deprecated
-
5.2.109 Apr 2024 -
5.2.003 Apr 2024Release notes
Open source →Changed
- Mark onWillPop as deprecated
Fixed
- Navigator.copyWith didn't properly copy the navigatorKey
- Rewrite usage of PopScope by providing
canPop: truewhen 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) - PopScope now just blocks popping until the initial tab is selected and the child navigator cant be popped anymore
-
5.1.028 Mar 2024Release notes
Open source →Fixed
- Fix deprecation of colorScheme.background
- The Main Scaffold only extends its body if necessary (full overlap or hidden navbar) to prevent unnecessary padding (equal to navbar height)
- Replace NavBar SlideTransition with SizeTransition to correctly report its size to the Main Scaffold
- Pass on the source padding to the Main Scaffold Body if the navbar is hidden
- Pass the source viewPadding if navbar is hidden and the new body padding of the Main Scaffold as a new viewPadding to the tabs to ensure better placement of FABs on individual screens
- Prevent Navbar jumping when keyboard opens because the keyboard consumes the MediaQuery.padding.bottom
- Prevent Navbar jumping when keyboard opens because the keyboard consumes the MediaQuery.padding.bottom
- Fix tabs overlaying each other if no transition animation should be shown
-
5.0.013 Mar 2024Release notes
Open source →Added
- Easier and less error-prone usage api (MIGRATION GUIDE)
- Support for go_router
- Change the tab by sliding left/right (if enabled)
Fixed
- A ton of internal improvements
-
5.0.0-beta.1013 Mar 2024 pre-releaseRelease notes
Open source →Changed
- Rename ItemConfig color attributes
Fixed
- Make PersistentTabConfig.noScreen onPressed mandatory
-
5.0.0-beta.904 Mar 2024 pre-releaseNothing published for this version
-
5.0.0-beta.815 Jan 2024 pre-release -
5.0.0-beta.706 Dec 2023 pre-releaseRelease notes
Open source →Fixed
- Upgrade go_router to 12.1.1
- Make page switching transition rtl compatible
- Fix _animation not initialized error
- Switching tabs without stateManagement caused re-initializations of all loaded pages
-
5.0.0-beta.612 Sep 2023 pre-releaseRelease notes
Open source →Added
- Add
animatedTabBuilderto customize the transition when switching tabs - Support for Router API
Fixed
- Tab slide animation no longer shows intermediate tabs in the slide animation when switching to non adjacent tabs
- Add
-
5.0.0-beta.527 Feb 2023 pre-releaseRelease notes
Open source →Added
- Tab history when using android back button
Fixed
- ScreenTransitionAnimation with Duration.zero was throwing an error in the animation phase
Removed
- Remove unused attribute
_animateTabTransitiononScreenTransitionAnimation
-
5.0.0-beta.412 Feb 2023 pre-release -
5.0.0-beta.312 Feb 2023 pre-releaseRelease notes
Open source →Added
- A drawer can be passed to the PersistentTabView to be usable in every tab
Changed
- Renamed ItemAnimationProperties to ItemAnimation
- Made ScreenTransitionAnimation.animateTabTransition private
- Improved Example
-
5.0.0-beta.228 Nov 2022 pre-release -
5.0.0-beta.119 Nov 2022 pre-releaseRelease notes
Open source →Breaking Changes
itemAnimationProperties,neumorphicPropertiesandnavBarDecorationnow have to be applied to the NavBar Widget directly- navBarStyle now is a widget builder which also allows to pass a custom Widget instead of only the predefined ones
- Remove
PersistenTabView.custom(usePersistentTabViewinstead) constructor - Make items primary color the title and icon color and secondary the background color
backgroundColornow changes the color of the backgroundNavBarOverlapreplaces thebuttomScreenMargin
Changed
- Remove PersistentTabViewBase
- Replace
CupertinoPageScaffoldwithScaffold - Trimmed the styles
- Make inactiveIcon default to icon globally
- Tabs Navigators inherit the settings of the root Navigator
- Make null-safety safer
-
4.2.827 Mar 2023Release notes
Open source →Fixed
- Remove label padding in simple style
- Check if context is non-null before popping all screens
-
4.2.630 Oct 2022 -
4.2.516 Aug 2022Release notes
Open source →Fixed
- Fix cast error when using
onWillPopwithhandleAndroidBackButtonPress: false
- Fix cast error when using
-
4.2.401 Jul 2022 -
4.2.303 Jun 2022Release notes
Open source →Fixed
selectedTabScreenContextreturned a wrong context after visiting the tabs the first time
-
4.2.231 May 2022Release notes
Open source →Fixed
- Using one border side in NavbarDecoration caused an error (see #21)
-
4.2.129 May 2022Release notes
Open source →Added
- Add basic tests
Fixed
- Change
NavBarPadding.fromLTRB to use correct order
-
4.2.023 May 2022Release notes
Open source →Changed
- Fixed bug where the NavigatorObservers of a custom PersistenTabView threw errors when switching to another tab
- Fixed using the correct navigatorKeys for the correct tab
- Breaking Change: The
CustomWidgetRouteAndNavigatorSettings.navigatorObserversare now a list of lists of NavigatorObservers, so each tab has its own list of NavigatorObervers. See the attribute for more information and an example
-
4.1.1113 May 2022Release notes
Open source →Changed
- Support Flutter 3.0.0 without triggering warnings (see
_ambiguatefunction for more)
- Support Flutter 3.0.0 without triggering warnings (see
-
4.1.1025 Apr 2022Release notes
Open source →Changed
- Remove label top padding in most styles because it broke layout for custom image icons (see #20)
-
4.1.902 Apr 2022 -
4.1.819 Mar 2022 -
4.1.719 Mar 2022 -
4.1.618 Mar 2022Release notes
Open source →Fixed
- Fixed empty tabs when fastly switching tabs with animations enabled
-
4.1.517 Mar 2022Release notes
Open source →Fixed
- Fix issue with
navbarDecoration.borderRadiusbeing null but expected to not be null by styles 15 and 16
- Fix issue with
-
4.1.417 Mar 2022Release notes
Open source →Added
- Adding interactive example
Changed
PersistentTabView.custompasseshideNavigationBarWhenKeyboardShowstosuper- Breaking
resizeToAvoidBottomInsetdefaults totrueas per docs
Fixed
hideNavigationBarWhenKeyboardShowsno longer depends onresizeToAvoidBottomInsetto work properly
-
4.1.305 Mar 2022 -
4.1.202 Mar 2022 -
4.1.120 Jan 2022Release notes
Open source →Fixed
- Hotfix for
popAllScreensOnTapOfSelectedTabofPersistentTabView.custom PersistentTabView.customnow also needs the items- You have to call
navBarEssentials.onItemSelected(index)to trigger navigator stack clearing - Breaking:
customWidgetnow is a builder that receivesnavBarEssentials - Breaking: To make
popAllScreensOnTapOfSelectedTabwork, specify youronItemSelectedfunction of theCustomWidgetlike this:
- Hotfix for
-
4.1.020 Jan 2022Release notes
Open source →Added
PersistentTabView.customnow supportspopAllScreensOnTapOfSelectedTab
Fixed
- Breaking:
CutsomWidgetRouteAndNavigatorSettingsgot renamed toCustomWidgetRouteAndNavigatorSettings
-
4.0.320 Jan 2022