guided_tour 1.0.3
guided_tour: ^1.0.3 copied to clipboard
Declarative guided tours and coachmarks where the tour is data: screens carry a TourKey, tour definitions import no UI. No registration, no dependencies.
Changelog #
1.0.3 #
Repository tooling only. No library code changed; 1.0.0 through 1.0.3 are identical at runtime.
- Added a tag-driven release workflow. Pushing
vX.Y.Znow guards that the tag matchesversion:inpubspec.yamland thatCHANGELOG.mdcarries a matching## X.Y.Zheading, runs the full CI matrix, and then publishes to pub.dev via OIDC — so a mistyped tag fails in seconds rather than after the whole matrix, and no publish happens from an unverified tree. - CI is now a reusable workflow called by the release pipeline, so the checks that gate a publish are the same ones that run on every push.
- README install snippet updated to
^1.0.3.
1.0.2 #
Constraint correction. No library code changed; 1.0.0, 1.0.1 and 1.0.2 are identical at runtime.
- Raised the Flutter floor from 3.38.0 to 3.38.1. Stable Flutter 3.38.0
ships Dart
3.10.0 (build 3.10.0-290.4.beta), and a prerelease sorts below the release it is tagged for, so3.10.0-290.4.betafails the unchangedsdk: ">=3.10.0 <4.0.0"andpub geterrors out. 3.38.1 is the first stable with an untagged Dart 3.10.0, so it is the real floor; earlier releases advertised one that could not resolve. The CI matrix now builds against 3.38.1. - README install snippet and the stated Flutter requirement updated to match.
1.0.1 #
Documentation only. No library code changed; 1.0.0 and 1.0.1 are identical at runtime.
- Fixed the README media, which did not render on pub.dev in 1.0.0. The images
were referenced by paths relative to
doc/media/, which.pubignorekeeps out of the published archive; pub.dev resolves relative README links against the archive rather than againstrepository:, so it dropped every<img>and theexample/link, leaving bare alt text. They are now absoluteraw.githubusercontent.comURLs, which pub.dev serves through its external-images proxy, and the archive stays at 53 KB.
1.0.0 #
Initial release.
A declarative guided-tour / coachmark framework in which tours are pure data:
a screen participates by carrying a const TourKey('some.id'), and tour
definitions reference targets by string id without importing any UI. No
registration, no GlobalKeys, no third-party dependencies, no routing
dependency.
Core
TourKeytarget marking, resolved by walking the element tree — duplicate ids are legal and resolve to the on-stage, topmost-route match.TourController: aChangeNotifierstate machine over a pure-data step list, with generation-tagged waits, a step-visit loop guard, and lifecycle reported throughTourEvent.TourHost: one wrap of the app, installing the tour layer as aStacksibling above the Navigator — structurally above every route, dialog and sheet.TourNavigator: a three-member routing seam. The package depends on no router; the README carries the complete GoRouter adapter and the example ships it.
Step advance model
AdvanceOn.next,.tap,.route,.signal,.predicateand.branch, each with agotofor branching.- Tap-through: interactive steps let the real widget receive the real gesture.
- Milestone buffering with a one-step lookback window, so an async outcome that resolves before the next step finishes mounting is not lost.
skipIfAbsentfor targets that legitimately may not exist.- Suspension: a dialog or sheet covering the target hides the overlay entirely while the step stays armed; the spotlight returns when the target is exposed.
- Remount waiting, per-step timeouts, and a Back stack across passive steps.
Rendering
- Live rect tracking every frame; route-transition settling before measurement;
Scrollable.ensureVisiblefor off-screen targets. - Tooltip placement that flips above/below, clamps to screen edges, and stays
clear of the keyboard's
viewInsets. TooltipConfig.tooltipBuilder+TourStepViewfor a fully custom card — the app styles it, the package positions it.HoleShape:RectHole,CircleHole,PathHole, driving painting and hit testing from one path.TourStepView.stepCountis nullable and published only for provably linear tours, so a branching tour never shows a progress indicator that runs backwards.
Accessibility
- Step announcements via
SemanticsService.sendAnnouncement, addressed to the target's ownFlutterViewand in the ambientDirectionality. - Semantics container and live region on the tooltip; a dismiss action on the scrim.
Notes
- Requires Flutter 3.38.0 / Dart 3.10.0 or newer. That floor is set by
SemanticsService.sendAnnouncement, which first shipped in Flutter 3.38.0; the API it replaces asserts in multi-window apps. CI builds against the floor so the constraint is a tested claim rather than an aspiration. - The package ships no product strings beyond four overridable button labels,
displays no errors of its own, and stores nothing. Failures surface as
TourAborted(reason)events for the app to handle.