NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A state management solution on top of Router API for larger apps.
Last release 6 months ago
04 Apr 2026
Ships unpredictably
gaps range from 9 days to 1.4 years
Nearly every release is documented
notes for 46 of 47 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
47 releases · first in 2022
One column per quarter.
Migrate from the deprecated Navigator.onPopPage, make PageStacksRoute…
Migrate from the deprecated Navigator.onPopPage, make PageStacksRoute…
Navigator integration from the deprecated onPopPage to onDidRemovePage and PopScope.PageStacksRouterDelegate non-abstract and sufficient.MaterialPageStacksRouterDelegate and created a deprecated typedef to use its parent PageStacksRouterDelegate.mockito version to ^5.5.1 to support the latest SDK.ios and android directories in the example app to support the recent Gradle and SDKs.PPageStatefulBloc. Create your own custom class or mix the Bloc from the bloc package. This solution is opinionated and limited and will not be maintained.PageStackBackButtonDispatcher.pageStackBloc in favor of pageStack.PPageStacksStackEvent.bloc in favor of stack.PPageStacksStackEvent.pageStackBlocEvent in favor of pageStackEvent.CStatelessMaterialPage to PStatelessMaterialPage in accordance with v0.7.0.* Support rxdart v0.28.
Deprecate PagePath.location, use PagePath.uri, disallow PageStacks.se…
Deprecate PagePath.location, use PagePath.uri, disallow PageStacks.se…
PagePath.uri instead of .location to construct RouteInformation.PagePath.location.PageStacks.setCurrentStackKey for a non-existent stack.Require flutter_issue_108697_workaround: ^0.1.3 with a fix for WebKit.
flutter_issue_108697_workaround: ^0.1.3 with a fix for WebKit.Added PPageStateMixin.pageStack, fill it when a page is added to the stack.
PPageStateMixin.pageStack, fill it when a page is added to the stack.Added PageStackNavigator.navigatorKey, passed PageStackRouterDelegate…
Added PageStackNavigator.navigatorKey, passed PageStackRouterDelegate…
PageStackNavigator.navigatorKey, passed PageStackRouterDelegate.navigatorKey.Add library doc comment, fix linter issues, upgrade total_lints to 2.…
Add library doc comment, fix linter issues, upgrade total_lints to 2.…
Change formatting, bump version to v0.9.0
Change formatting, bump version to v0.9.0
restoreRouteInformation in PageStackConfiguration and PageStacksConfiguration
are now nullable. They used to return / for null paths and that had been showing for an instant
in the address bar when starting at a non-/ URL.Support collection 1.17.0, v0.8.4
Support collection 1.17.0, v0.8.4
Add PagePath.uri, PagePath.getUriAtBase(), relax mockito version requ…
Add PagePath.uri, PagePath.getUriAtBase(), relax mockito version requ…
PagePath.uri.PagePath.getUriAtBase().Allow PageStack.replacePath without RouteInformationParser.
PageStack.replacePath without RouteInformationParser.* Exports PageStacksStackEvent.
PageStacksStackEvent.BREAKING: Removed all functionality deprecated in v0.6 and v0.7.
Added PageStacksBuilder widget.
PageStacksBuilder widget.5_route_result example to use ChangeNotifier instead of bloc./example/README.md.* Fixed image paths.
Fixed linter issues, formatted examples, added the format check to the CI.
app_state subdirectory.Moved the examples to the package's repository.
…bloc package, ChangeNotifier, or anything else. Deprecated typedefs to the older classes and deprecated aliases to older members were added to soften…
Most of the references to BLoC were removed from the package to allow any implementation for
state management:
custom BLoC, BLoC or Cubit from the bloc package,
ChangeNotifier, or anything else. Deprecated typedefs to the older classes and
deprecated aliases to older members were added to soften the change.
This is a short-lived major version to migrate from those deprecated API to the new one but to still be able to run your app in the process. Every deprecation in this version is scheduled for removal in v0.8.0.
PageStackPageBlocEvent:
PageStackPageEvent.bloc was changed to PageStateMixin state.pageBlocEvent was renamed to pageEvent.PageStacksPageStackBlocEvent:
PageStacksStackEvent.bloc was renamed to stack.pageStackBlocEvent was renamed to pageStackEvent.MaterialPageStacksRouterDelegate.pageStacksBloc was changed from a named constructor
argument to a positional one and renamed to pageStacks.PageStackNavigator.bloc was renamed to stack.PageStack.pages is now an UnmodifiableListView and not the actual list.typedefs and member aliases that are thus non-breaking:
PageBloc was changed to PageStateMixin mixin. To continue using
custom blocs as in the previous versions, mix it in with with keyword
instead of extending PageBloc. The newly deprecated PageBloc
is changed to mix in this mixin.PageBlocEvent was renamed to PageEvent.PageBlocPathChangedEvent was renamed to PagePathChangedEvent.enum PopCause:
pageBloc was renamed to page.pageStackBloc was renamed to pageStack.PageBlocPopEvent was renamed to PagePopEvent.PageStackBackButtonDispatcher.pageStackBloc was renamed to pageStack.PageStacksBackButtonDispatcher.pageStacksBloc was renamed to pageStacks.PageStackBlocEvent was renamed to PageStackEvent.PageStackRouterDelegate.pageStackBloc was renamed to pageStack.PageStacksBloc:
PageStacks.currentStackBloc was renamed to currentStack.PageStacksBlocEvent was renamed to PageStacksEvent.PageStacksRouterDelegate.pageStacksBloc was renamed to pageStacks.CAbstractPage.bloc was changed to PageStateMixin.state.PageStackEvent now has type parameter <P extends PagePath>.PageState class is added as the default class that uses PageStateMixin.C prefix were changed to P prefix. Deprecated typedefs added for
backward compatibility. That prefix was historical
when the term 'configuration' was used instead of 'path'. The new P stands for 'path'.
These classes are meant for apps that have a common superclass under PagePath.
All other apps should use the same classes without prefixes.Added PageStacksConfigurationChangedEvent.
PageStacksConfigurationChangedEvent.Renamed PageStackBlocNavigator to PageStackNavigator. A deprecated typedef was added for backward compatibility.
PageStackBlocNavigator to PageStackNavigator. A deprecated typedef was added
for backward compatibility.Added PageStackRouterDelegate.observers, PageStackRouterDelegate.transitionDelegate.
PageStackRouterDelegate.observers, PageStackRouterDelegate.transitionDelegate.Added PageStackBlocNavigator.observers, PageStackBlocNavigator.transitionDelegate.
PageStackBlocNavigator.observers, PageStackBlocNavigator.transitionDelegate.* Updated example links.
Added PageStackBloc.popUntilBottom(), it uses the new PopCause.pageStackBloc.
PageStackBloc.popUntilBottom(), it uses the new PopCause.pageStackBloc.PageBlocPopEvent is now always created with the correct R type. Before it had beenconst PageBlocPopEvent<Null> for pops without data.Added PageStackBloc.replaceWith to declaratively navigate to a given path with two options:
PageStackBloc.replaceWith to declaratively navigate to a given path with two options:
mode: PageStackMatchMode.none.mode: PageStackMatchMode.keyOrNullPathNoGap.mode argument to PageStackBloc.setConfiguration to choose the match mode the same way
as in replaceWith.PageBlocCloseEvent.cause to tell between the back button close, the bloc's own intention
to close, and a kick-out as a result of stack diff.BlocMaterialPage is now non-abstract.PageStackBloc.handleRemoved().A deprecated typedef was created for backwards compatibility.
PageBlocCloseEvent to PageBlocPopEvent to align with didPopNext method.typedef was created for backwards compatibility.Methods, getters, and arguments with pages' 'configuration' in its name were changed to use 'path', deprecated copies of the old ones were added for b…
PageConfiguration to PagePath. A typedef for backwards compatibility is added.
Methods, getters, and arguments with pages' 'configuration' in its name were changed to use 'path',
deprecated copies of the old ones were added for backwards compatibility.
The PageConfiguration's name was a permanent source of confusion.
Each doc had to start with a note that PageConfiguration corresponds to a URL,
and it was not easy to memorize. This change will simplify the learning of this package.
It has also stripped 9-13 characters from identifiers.
Path is inspired by the
original article announcing Router API
(as well as app_state name itself was).
Configuration earlier was inspired by Router docs where it means the configuration of
the whole app (earlier versions of app_state were designed to allow storing only the top page's
state, and so 'configuration' was extended to pages as well). 'Configuration' is still used
in PageStackConfiguration and PageStacksConfiguration class names that do represent
the whole app's state, and that is correct.PagePath.restoreRouteInformation. It used to allow overriding state
and was confusing because it was not used in serializing for browser history
(super.state is).* Fix images in README.
BREAKING: All classes that had a type parameter no longer have it. The idea of this type parameter is to have a subclass that is a superclass to all o
<C extends PageConfiguration> no longer
have it. The idea of this type parameter is to have a subclass that is a superclass to all of
your configurations. An example is when you store a language slug there, and it must be
automatically present in all your configurations. These cases are rare, and most of the time
<PageConfiguration... only clutters the code when you must provide some other typed
parameters like PageBloc type or the return value.
All such classes were renamed in a pattern of PageBloc<C, R> -> CPageBloc<C, R>.
Then typedefs were added like typedef PageBloc<R> = CPageBloc<PageConfiguration, R>.
If you need the common subclass of PageConfiguration,
just add C before all such typed parent classes to get it back.
Otherwise just remove <PageConfiguration> from your code.PageStackBloc compares pages to null PageConfiguration,
it ignores the page keys and never disposes such pages.
This is to allow non-web apps without any PageConfiguration classes.
Otherwise the pages were always kicked out when comparing to null PageConfiguration.
No practical use cases were affected.PageConfiguration classes are now optional for all non-web apps and web apps that do not
care for URLs.PageConfiguration is now non-abstract and has / as the default location.PageConfiguration objects no longer need to parse RouteInformation.state in their tryParse.
To benefit from this, stop overriding parseRouteInformation in your parser and override
one of the new methods instead: parsePageConfiguration,
PageStackRouteInformationParser.parsePageStackConfiguration,
PageStacksRouteInformationParser.parsePageStacksConfiguration.
These methods are only called when failed to extract state from RouteInformation,
i.e. when the URL is typed in, and so no non-URL state information is present.PageStackConfiguration.getTopPageConfiguration() is now nullable and returns null if
none of the pages in the stack have PageConfiguration.PageStackRouteInformationParser and PageStacksRouteInformationParser can now be used
without subclassing in all non-web apps and web apps that do not care for URLs.
By return they parse null PageConfiguration objects.PageStackRouteInformationParser and PageStacksRouteInformationParser in their
restoreRouteInformation now return all their stack/stacks states to store in browser history
and not only that of the top PageConfiguration.const constructors to PageStackRouteInformationParser and
PageStacksRouteInformationParser.PageStackRouteInformationParser and PageStacksRouteInformationParser now have
parsePageConfiguration to only parse the single PageConfiguration. This way the superclasses
call defaultStackConfiguration and defaultStacksConfiguration so you don't have to.
They are the recommended replacements to respective parseRouteInformation methods.
They are called only when failed to recover from RouteInformation.state.
To use them, stop overriding parseRouteInformation.PageStackRouteInformationParser now has parsePageStackConfiguration,
and PageStacksRouteInformationParser now has parsePageStacksConfiguration.
They are the alternative replacements to respective parseRouteInformation methods
in case you need additional logic to recover the stack state that cannot be derived
from your PageConfiguration alone.
They are called only when failed to recover RouteInformation.state.
To use them, stop overriding parseRouteInformation.Added PageConfiguration.location.
PageConfiguration.location.PageConfiguration.defaultStackConfigurations.Deprecated PageBloc.onForegroundClosed in favor of didPopNext.
PageBlocCloseEvent have a new R type parameter
for the return result.
The actual result is of R? with null if closing without data.PageBlocCloseEvent has a new required data property of type R.
It is encouraged to use it instead of subclassing PageBlocCloseEvent.const constructors because they have Completers now.PageBloc.pop(data).PageBloc.didPopNext(page, event).PageStackBloc.push returns a Future that completes when the page is popped.PageBloc.onForegroundClosed in favor of didPopNext.PageBloc.closeScreen and PageBloc.closeScreenWith in favor of pop.Re-licensed under MIT No Attribution.
total_lints, fix linter issues.Fix duplicate page key handling.
Call const constructors where possible.
dart format.README.mdAdded MaterialPageStacksRouterDelegate.
MaterialPageStacksRouterDelegate.StatefulBlocWidget.Const constructors for PageBlocCloseEvent, PageBlocConfigurationChangedEvent, PageStackConfiguration.
PageBlocCloseEvent, PageBlocConfigurationChangedEvent, PageStackConfiguration.Wrap PageStackBlocEvent as PageStacksBlocEvent.
PageStackBlocEvent as PageStacksBlocEvent.Add PageStacksBloc, PageStacksConfiguration, PageStacksRouteInformationParser, PageStacksRouterDelegate.
AppBloc.PageStacksBloc, PageStacksConfiguration, PageStacksRouteInformationParser, PageStacksRouterDelegate.PageConfiguration.defaultStackKey, defaultStacksConfiguration.An accidental debug print removed.
BREAKING: PageConfiguration is now abstract, added restoreRouteInformation().
PageConfiguration is now abstract, added restoreRouteInformation().PageConfiguration.defaultStackConfiguration.PageStackConfiguration.getTopPageConfiguration().PageStackRouteInformationParser.Fix onPopRoute in PageStackBlocNavigator.
onPopRoute in PageStackBlocNavigator.* Added PageStackRouterDelegate.
PageStackRouterDelegate.Nothing published for this version
Added PageBloc.closeScreenWith, PageBloc.onForegroundClosed.
PageBloc.closeScreenWith, PageBloc.onForegroundClosed.BREAKING: Renamed AppBlocNormalizedState to AppConfiguration.
AppBlocNormalizedState to AppConfiguration.PageStackBlocNormalizedState to PageStackConfiguration.ScreenBlocNormalizedState to PageConfiguration.Screen... events to Page... events.PageBloc.states to the new PageStatefulBloc subclass.PageBloc is not abstract.null for page keys.BREAKING: Removed ScreenBlocConfigurationChangedEvent.configuration.
ScreenBlocConfigurationChangedEvent.configuration.AppBloc.AppBlocNormalizedState, PageStackBlocNormalizedState, ScreenBlocNormalizedState.PageStackBloc.* Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →