swift_transitions 0.3.0
swift_transitions: ^0.3.0 copied to clipboard
iOS's navigation transitions for Flutter: the iOS 18 zoom transition with its interactive dismissal, and the push, both fitted frame by frame against the real thing.
Changelog #
All notable changes to this package are documented here. The format follows Keep a Changelog, and the package adheres to Semantic Versioning.
Unreleased #
0.3.0 - 2026-09-16 #
Changed #
- A zoom route is opaque, as a
CupertinoPageRouteis: once the flight has landed the routes beneath it are neither painted nor ticked, where before every one of them was rasterised on every frame the page drew. A covered route withmaintainStatefalse loses its source while obscured. - The page under a zoom route is painted from a snapshot taken on the first frame the route covers it, as UIKit paints the view controller it zooms from, and not again until the route has gone; what the page paints past its bounds runs on into the strip the scale uncovers, as it does natively. A hidden source and any platform view are left out of the snapshot.
Fixed #
- A committed dismissal pops while the navigator still reports the gesture,
so a hero flight the grab began — a
CupertinoNavigationBar's — carries on into the landing rather than being started again, which asserted in debug. - A committed dismissal of a route without a source no longer asserts as its landing overshoots.
0.2.1 - 2026-09-15 #
Fixed #
- A back swipe from anywhere yields to a pan on the page — a swipe deck's card — not only to a horizontal scrollable, and a drag that opens toward the leading edge is left to the page rather than claimed and dropped.
0.2.0 - 2026-09-14 #
Added #
ZoomTransitionOptions.backGestureRegion, where the zoom route's back swipe may start.ZoomDismissPhysics.anywhereSwipeDismissThreshold, the commit line of a back swipe begun anywhere on the page (0.79; the edge swipe's stays 0.70).
Changed #
- The back swipe starts anywhere on the page by default, on both routes, as on iOS 26; a swipe begun on the leading edge is still the edge swipe and wins over a horizontal scrollable, one begun elsewhere yields to it.
- The push page's swipe from anywhere waits out 27 pt and commits from 42 % of the width; the zoom card's waits out 18 pt and commits below 0.79, measured against native.
ZoomDismissGestures.edgeSwipeandZoomGesture.edgeSwipearebackSwipe;ZoomDismissPhysics.dismissThresholdisedgeSwipeDismissThreshold.
0.1.2 - 2026-09-11 #
Fixed #
- A zoom's flight lands on the source's resting rect rather than one read back through the covered page's scale, which was 9 % too big under a deferred push.
- A pop's cross-fade comes in from the start of the flight, as native's does, instead of over its last half.
0.1.1 - 2026-09-11 #
Added #
ZoomAlignmentRectContext.pageContextandrectOf, so an alignment rect can be measured from a key once the page is laid out.
Fixed #
- An aligned zoom scales the page as one picture so the art lands on the
source, as UIKit's
alignmentRectProviderdoes, rather than closing a window in on it. - A
ZoomTransitionSourcethat is not being painted (an offstage tab, a hiddenVisibility) no longer takes part in a flight.
0.1.0 - 2026-09-11 #
First release: iOS's navigation transitions for Flutter, fitted against a
native reference app frame by frame. The calibrated constants and the known
deviations are in docs/design.md.
Added #
ZoomPageRoute,ZoomPageandZoomTransitionSource: the iOS 18 zoom transition, withZoomTransitionOptionsmirroringUIZoomTransitionOptions.- Interactive dismissal by pan, edge swipe and pinch, interruptible throughout,
with
ZoomDismissPhysicscarrying the fitted response andZoomScrollControllerhanding a top-edge drag across from a scroll view. SwiftPageRoute,SwiftPageandSwiftPageTransitionsBuilder: the iOS push with the measured curve, dim and display-radius corner clip, and a back swipe from the leading edge or anywhere (BackGestureRegion).DisplayCornerRadii,SwiftCurvesandSwiftSprings.