guided_tour 1.0.3 copy "guided_tour: ^1.0.3" to clipboard
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.Z now guards that the tag matches version: in pubspec.yaml and that CHANGELOG.md carries a matching ## X.Y.Z heading, 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, so 3.10.0-290.4.beta fails the unchanged sdk: ">=3.10.0 <4.0.0" and pub get errors 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 .pubignore keeps out of the published archive; pub.dev resolves relative README links against the archive rather than against repository:, so it dropped every <img> and the example/ link, leaving bare alt text. They are now absolute raw.githubusercontent.com URLs, 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

  • TourKey target marking, resolved by walking the element tree — duplicate ids are legal and resolve to the on-stage, topmost-route match.
  • TourController: a ChangeNotifier state machine over a pure-data step list, with generation-tagged waits, a step-visit loop guard, and lifecycle reported through TourEvent.
  • TourHost: one wrap of the app, installing the tour layer as a Stack sibling 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, .predicate and .branch, each with a goto for 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.
  • skipIfAbsent for 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.ensureVisible for off-screen targets.
  • Tooltip placement that flips above/below, clamps to screen edges, and stays clear of the keyboard's viewInsets.
  • TooltipConfig.tooltipBuilder + TourStepView for 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.stepCount is 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 own FlutterView and in the ambient Directionality.
  • 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.
1
likes
160
points
27
downloads

Documentation

API reference

Publisher

verified publishervelzosoft.com

Weekly Downloads

Declarative guided tours and coachmarks where the tour is data: screens carry a TourKey, tour definitions import no UI. No registration, no dependencies.

Repository (GitHub)
View/report issues

Topics

#onboarding #tutorial #coachmark #walkthrough

License

BSD-3-Clause (license)

Dependencies

flutter

More

Packages that depend on guided_tour