- Released @ 6/2026 (UTC)
- breaking:
AnimationEffect.datais now a method (List<AnimationLayerEffect> data(BuildContext, Size, double)) — custom subclasses must replace theirget data => (ctx, sz, v) => [...]override with a regular method. - breaking:
setPreservationStrategycallback signature is now(RouteBuilder) => bool; readbuilder.routeStatefor the previous second argument. - breaking:
RouteState.keyreturnsObjectKey(this)instead ofValueKey(uri.toString())— two same-URI instances no longer share a Flutter element. - breaking: widget cache is identity-keyed; an explicit
push(rs.copyWith(skipCurrent: false))now creates a distinct widget per call (modal stacking).skipCurrent: true(default) still dedups against preserved cache entries. - breaking:
PaperTurnEffectis visually rewritten — outgoing page peels off the surface with size-aware perspective; use the unchangedPageFlapLeft/PageFlapRightfor the previous behavior. - breaking:
push/pushUriinterpret+in the URI path as a stack delimiter underUrlStrategy.stacked; registering a route path containing+under that strategy throwsArgumentErrorat construction. - feat:
UrlStrategy.stackedopt-in for deep-linkable route stacks — URLs like/home+/sheet?tab=2round-trip across reloads. - feat: forward-history survives reloads under
UrlStrategy.stacked— routes beyond the active one are encoded in the URL fragment (/home+/sheet#/dialog+/toast), so reloading after agoBackwardstill leavesgoForward/ browser-forward reachable. - feat:
RouteStackUricodec for encoding / decoding stack URIs with matrix-style;clauses for per-route queryParameters; plusRouteStackUri.encodeSegments/decodeSegmentsfor the fragment portion. - feat:
DraggableModalSheet— drag-down-to-dismiss bottom-sheet modals as first-class routes. - feat:
DragNavigable— horizontal swipe to navigate forward / back, drives the standard route animation via tentative-navigation hooks. - feat:
RouteBuilder.isOverlayflag keeps the previous route mounted beneath modals so the base actually paints behind. - feat: tentative-navigation API on
RouteController(beginTentativeNavigation,updateTentativeProgress,commitTentative,abortTentative,isTentativeActive) for gesture-driven transitions. - feat:
PaperTurnBackEffectmirror ofPaperTurnEffectfor backward page turns. - feat:
AnimationEffect.previousOnTopgetter for effects where the outgoing layer is the visible mover. - feat:
AnimationEffectBuilderState.reverseAndAwait/forwardAndAwaitfor awaiting transition completion. - fix: stacked-layer
ColorFilter/ImageFilternow reaches Material / ink /RepaintBoundarychildren (previously silently dropped by the canvas-levelsaveLayerpath). - fix: cold-booting into a multi-route stack URL now paints the base route below the top.
- fix:
buildScreenpaints every route in the visible stack as a static layer beneath the active transition pair. - fix: page-turn effects compute perspective from the active viewport size so wide screens no longer lose pixels to negative-W clipping.
- fix: duplicate path registrations log a warning in release builds (previously a debug-only
assert).