nuvigator
A powerful routing abstraction over Flutter navigator, providing some new features and an easy way to define routers.
2.0.1
36K downloads/mo
#1701 most downloaded on pub.dev
nubank/nuvigator
What this package is like to depend on
Last release 1 years ago
12 Jun 2025
Ships unpredictably
gaps range from 8 days to 2.6 years
Nearly every release is documented
notes for 37 of 38 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
68 releases · first in 2019
0 releases in the last 12 months
see the full history below
Release timeline
68 releases · Sep 2019 to Jun 2025Releases
latest 60 of 68-
2.0.112 Jun 2025Release notes
Open source →- Add optional TransitionBuilder to Nuvigator to allow nesting additional Widgets on the tree
-
2.0.026 Mar 2025Release notes
Open source →What's Changed
- Removal of Nuvigator Legacy API by @leoiacovini in #101
- Add support for sound null safety by @leoiacovini in #102
- Add needed paramenters in the readme use case by @WladmirJunior in #105
- fix #103 by @realshovanshah in #104
- Migrate to compatible with Dart 3 by @joaobracaioli in #108
- Fix analysis and pipeline by @obraca in #109
- Add nuvigator maybeOf by @raapperez in #117
- Make analyzer be a transitive dependency by @raapperez in #118
- Remove deprecated hash function to support Flutter 3.27 by @bltavares in #121
- Bump version to 2.0.0 and update Changelog by @leoiacovini in #123
New Contributors
- @WladmirJunior made their first contribution in #105
- @realshovanshah made their first contribution in #104
- @joaobracaioli made their first contribution in #108
- @obraca made their first contribution in #109
- @bltavares made their first contribution in #121
Full Changelog: v1.8.0...v2.0.0
-
2.0.0-beta.324 Aug 2022 pre-releaseRelease notes
Open source →2.0 Major Beta Release 🎉
This beta release includes the so-awaited support for Sound Null Safety and the removal of the Legacy API
What's Changed
- Removal of Nuvigator Legacy API by @leoiacovini in #101
- Add support for sound null safety by @leoiacovini in #102
Full Changelog: v1.8.0...v2.0.0-beta.3
Release notes
Open source →- [BREAKING] Add support for Sound Null Safety
- [BREAKING] Remove Legacy API and Deprecated options related to it
-
2.0.0-beta.230 Jul 2021 pre-release -
2.0.0-beta.117 Jun 2021 pre-releaseRelease notes
Open source →- Add option to get registered routes after NuRouter initialization when overriding the
lazyRouteRegisteroption in NuRouter
- Add option to get registered routes after NuRouter initialization when overriding the
-
2.0.0-beta.011 Jun 2021 pre-releaseRelease notes
Open source →- Change the
NuRouter.onErrorto handle any thrown object (includingException)
- Change the
-
1.8.015 Aug 2022Release notes
Open source →What's Changed
- Mob plat/bump flutter 2.10 by @RaqG in #98
- Add 1.8.0-beta.0 changelog by @raapperez in #99
- Bump analyzer due to flutter 3.0.2 by @renatoaugustofranca in #100
New Contributors
- @RaqG made their first contribution in #98
- @raapperez made their first contribution in #99
- @renatoaugustofranca made their first contribution in #100
Full Changelog: v1.7.0-beta.0...v1.8.0
Release notes
Open source →- [FIX] Make Nuvigator compatible with Flutter 2.10.5
- [FIX] Make Nuvigator compatible with Flutter 3.0.2
- [FIX] [POSSIBLY BREAKING] Makes the default behavior of Nuvigator to not re-build itself and it's state when the NuRouter provided instance changes. This allows for fixing some state reloads/resets and navigation lost, specially on nested flows. If for some reason you were relying in the current behavior for some feature, you can provide a
shouldRebuildproperty to theNuvigatorthat should returntruewhen you wish to perform the rebuild.
-
1.6.205 May 2022 -
1.6.102 May 2022Release notes
Open source →- [FIX] Fix re-renders due to other state changes when
Nuvigator.shouldRebuildreturns false
- [FIX] Fix re-renders due to other state changes when
-
1.6.027 Apr 2022Release notes
Open source →- [ENHANCEMENT] Add
Nuvigator.shouldRebuildproperty for controlling when a Nuvigator should be rebuild.
- [ENHANCEMENT] Add
-
1.5.004 Mar 2022Release notes
Open source →- [NEW] Add
NuRoute.metaDatato be used as a metadata dictionary for NuRoutes - [NEW] Add
NuRouter.buildWrapperthat can be used to wrap thebuilderfunction of the registered NuRoutes
- [NEW] Add
-
1.4.127 Oct 2021Release notes
Open source →- [FIX] Fix error when disposing a Nuvigator that was rendered in a Route that does not implement
NuvigatorPageRoute
- [FIX] Fix error when disposing a Nuvigator that was rendered in a Route that does not implement
-
1.4.027 Oct 2021Release notes
Open source →- [NEW] Add
NuvigatorPageRoute.nestedNuvigatorproperty that is going to link to the nested Nuvigator instance that is being rendered by this Route - [NEW] Add
NuvigatorState.presenterRoutethat will link to the Parent Route that is rendering this Nested Nuvigator - [NEW] Add
NuvigatorPageRoute.of(context)to retrieve the closestNuvigatorPageRoutein the Context
- [NEW] Add
-
1.3.015 Oct 2021Release notes
Open source →- [ENHANCEMENT] Improvements to all
*Namedmethod in Nuvigator - [NEW] Add
NuRoute.withPathto be used as aRoutePredicatematcher - [NEW] Add new methods in Nuvigator:
replaceNamed,removeByPredicateandpopAndPush - [NEW] Adds key,
inheritableObservers,debug,observers,shouldPopRootarguments to theNuvigator.routesfactory - [NEW] Adds the optional result argument to the
Nuvigator.openmethod
- [ENHANCEMENT] Improvements to all
-
1.2.208 Oct 2021Release notes
Open source →- [FIX] Revert support for List Query Arguments in the legacy API, and preserve previous typings
-
1.2.107 Oct 2021Release notes
Open source →- [FIX] Make
Nuvigator.openpropagate all options to parent when the route is not found at the current level - [FIX] Properly support List Query Arguments in DeepLinks, instead of picking a random one
- [FIX] Make
-
1.2.025 Sep 2021Release notes
Open source →- Improve error message when a NuRoute is registered twice
- Improve error handling on empty NuRouters
- Add option to get registered routes after NuRouter initialization when overriding the
lazyRouteRegisteroption in NuRouter - [BREAKING] Change the
NuRouter.onErrorto handle any thrown object (includingException)- Type of the
NuRouter.onErrorfunction changed fromExceptiontoObject
- Type of the
- Bump dependencies versions and make code adjustments to support usage on non nullable projects (does not include non-nullable in Nuvigator itself)
-
1.2.0-beta.008 Jun 2021 pre-releaseRelease notes
Open source →- Bump dependencies versions and make code adjustments to support non nullable
-
1.1.029 May 2021Release notes
Open source →- Add the
ScreenTypeBuilderclass to allow the definition and creation ofScreenTypesin an ad-hoc manner - Add the
screenTypeparameter to theNuvigatorState.openmethod, allowing to override theScreenTypeof a defined Route to be opened
- Add the
-
1.0.012 Apr 2021Release notes
Open source →- First stable release with NEXT API (check past beta changelog entries for details)
-
1.0.0-dev.1104 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.1004 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.904 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.804 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.704 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.604 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.504 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.404 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.304 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.204 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.103 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-dev.003 Dec 2020 pre-releaseNothing published for this version
-
1.0.0-beta.1201 Mar 2021 pre-releaseRelease notes
Open source →- Add option in NuRouter to retry the initialization of the Router when it fails
-
1.0.0-beta.1125 Feb 2021 pre-releaseRelease notes
Open source →- Add option in NuRouter to provide an error handling function when the Router initialization fails
-
1.0.0-beta.1010 Feb 2021 pre-release -
1.0.0-beta.909 Feb 2021 pre-release -
1.0.0-beta.829 Jan 2021 pre-releaseRelease notes
Open source →- Fix the NuRouteSettings copy and fallback methods that were not considering the settings property
-
1.0.0-beta.626 Jan 2021 pre-releaseRelease notes
Open source →- Fix the
NuRouterLoaderto re-instantiate the nuvigator only if the router change
- Fix the
-
1.0.0-beta.522 Dec 2020 pre-release -
1.0.0-beta.407 Dec 2020 pre-release -
1.0.0-beta.305 Dec 2020 pre-releaseRelease notes
Open source →- Add
awaitForInitoption in theNuRouterto configure if it should support async initialization - Fix router property name on
NuRoute - Make
loadingWidgeta getter method
- Add
-
1.0.0-beta.204 Dec 2020 pre-releaseRelease notes
Open source →- Add support from Navigation coming from Native side on Next API
INuRouter.getRoutenow accepts an optionalisFromNativeoptionNuvigatorState.opennow accepts an optionalisFromNativeoption
- Remove default screenType from Nuvigator constructor
- Add support from Navigation coming from Native side on Next API
-
1.0.0-beta.104 Dec 2020 pre-releaseRelease notes
Open source →- Fixed asserts on Nuvigator
- Add improved error message when a ScreenRoute is rendered without a ScreenType specified
-
1.0.0-beta.004 Dec 2020 pre-releaseRelease notes
Open source →- Introduction of a new dynamic API (aka:
next), more info can be found at it's own documentation- DeepLinks and RouteNames where unified under paths
- New dynamic approach to define Routes and Routers
- More info can be found at here
initialDeepLinkandinitialRoutehave better error reporting and a more precise behavior.- Just the explicitly provided initialRoute is going to be used to find the Route.
- Nuvigator now relies on a interface type
INuRouterinstead of a concrete specific implementation onScreenNotFoundmethod was removed- Introduction of
NuvigatorState.openin favor of.openDeepLink. This new method supports nested deepLink navigation. - Old API can be considered deprecated from now on. Prefer using the
nextAPI on new projects.
- Introduction of a new dynamic API (aka:
-
1.0.0-beta.0+104 Dec 2020 pre-release -
0.7.227 Oct 2020 -
0.7.121 Oct 2020Release notes
Open source →- Update README
- Update pubspec.yaml to support analyzer up to version
0.41.0
-
0.7.019 Oct 2020Release notes
Open source →- [BREAKING] Rename classes to avoid conflicts with Flutter 1.22 Router Widget
Routerwas renamed toNuRouter- The
NuRouterannotation was renamed tonuRouterconst orcustomNuRouterfunction
- [BREAKING] Rename classes to avoid conflicts with Flutter 1.22 Router Widget
-
0.6.217 Aug 2020Release notes
Open source →- Fix NPE exception when a old instance of router tries calling some methods on it's nuvigator
-
0.6.114 Aug 2020Release notes
Open source →- Fix a
NavigationObservererror when the nuvigator is updated. Now we are reloading theinheritableObserversandStateTrackerwhen has an update.
- Fix a
-
0.6.010 Aug 2020Release notes
Open source →- Add support for typed screen arguments on deep links. In addition to
String, we now supportint,double,bool, andDateTime.
- Add support for typed screen arguments on deep links. In addition to
-
0.5.104 Aug 2020 -
0.5.014 May 2020 -
0.4.616 Apr 2020 -
0.4.516 Mar 2020 -
0.4.413 Mar 2020Nothing published for this version
-
0.4.227 Feb 2020Release notes
Open source →- Fix the
Nuvigator.of(context)to start the search at the last state instead of root
- Fix the
-
0.4.113 Feb 2020 -
0.4.011 Feb 2020Release notes
Open source →- Allow to pass an
initialDeepLink - Add new option to pop SystemNavigator on last screen of the Root Router
- Allow to pass an
-
0.3.003 Feb 2020Release notes
Open source →- [BREAKING] API Simplifications/Changes.
- Removal of
ScreenWidgetand related generated classes. - Removal of
FlowRoute, now you can use the defaultScreenRouteand pass the Nuvigator to the builder function. - Removal of
GlobalRouter, everyRouterhad it's capabilities incorporated, you can override previousGlobalRouterproperties directly in your topmost Router class, and pass it directly to the Nuvigator. - Removal of Nuvigator
initialArgsauto-passing, now you should explicitly provide the arguments required to the nested nuvigator. The suggestion is to pass it to the Router constructor. - Removal of
FlowRouters. - Nested Nuvigators will not have it's router exposed by the parent anymore.
- Use extension methods to navigation methods in the Router. Instead of
ExampleNavigation.of(context).toRoute()useRouter.of<ExampleRouter>(context).toExampleRoute(). - Use of extension methods to
screensMapandroutersgenerator. Instead of passing this to the function, just call the private getter_$screensMapand_$routersin theRouterclass. - Unify
RouterandBaseRouter, instead of extendingBaseRouteryou should extendRouterdirectly. - Rename
getDeepLinkPrefixtodeepLinkPrefix. initialRouteis now a required argument to Nuvigator.
- Removal of
- [IMPORTANT] Router instances should be unique per Nuvigator. The same Router instance SHOULD NOT be shared by different Nuvigator (we advise to create new instances together with the Nuvigator).
- A bug was fixed were the
maybePopmethod was not consistent with the Android back button behavior. Now the expected behavior is to always pop the Route of the active Nuvigator. - Nuvigator now keeps track of it's Route stack.
- Added debug flag to Nuvigator to log all route transitions/changes.
- Observers management was moved into the state lifecycle to ensure that inheritableObservers are always going to be considered.
- [BUMP] Updates to Flutter 1.12.1, resolves some deprecation warnings.
- A
toMapgetter was added toArgs*classes to serialize them intoMap<String, Object>. - Added new mixin
NuvigatorRoutethat should be incorporated byPageRoutesused in customScreenTypes. While this mixin is optional, it will guarantee the correct behavior of Android's back button and also make nested Nuvigators Routes presentAppBarback buttons correctly based in the overall App state, and not only by the current Nuvigator. (The provided screensTypes Material and Cupertino have already been update to include this new Mixin). - Improvement of some error messages that could be misleading or produce unexpected error.
- [BREAKING] API Simplifications/Changes.