Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add zakariaf/Flutter-Skills --skill navigation-and-routinggit clone --depth 1 https://github.com/zakariaf/Flutter-SkillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/zakariaf/flutter-skills/navigation-and-routing)<a href="https://agentmods.dev/skills/zakariaf/flutter-skills/navigation-and-routing"><img src="https://agentmods.dev/badge/skills/zakariaf/flutter-skills/navigation-and-routing/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/zakariaf/flutter-skills/navigation-and-routing"><img src="https://agentmods.dev/badge/skills/zakariaf/flutter-skills/navigation-and-routing.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00175 | $0.02360 |
| Opus 5 | $0.00088 | $0.01180 |
| Sonnet 5 | $0.00035 | $0.00472 |
| Haiku 4.5 | $0.00017 | $0.00236 |
Grade A, and why
navigation-and-routing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 158 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Navigation and routing
This skill owns app navigation with go_router. There is exactly ONE GoRouter for the app, defined in lib/routing/, and every screen is reachable by a URL. Navigation is a data structure (routes + a pure redirect), not a pile of imperative Navigator.push calls.
Read the reference for the task at hand:
references/go-router-config.md— the single router,context.govscontext.push, path params vsstate.extra, typed route helpers,errorBuilder/404.references/guards-and-redirects.md— pureredirectfunctions, the RiverpodrefreshListenable, auth + onboarding gates, avoiding redirect loops.references/shells-and-deep-links.md—StatefulShellRoute.indexedStackfor bottom-nav/rail shells,CustomTransitionPage,PopScope, and notification-payload → location mapping.
Run scripts/check_routing.sh before a PR.
Non-negotiable rules
- Exactly ONE
GoRouter, built inlib/routing/, wired once viaMaterialApp.routerinapp.dart. Multiple routers fragment history, deep links, and back-button behaviour. The router is created behind a provider so guards can watch app state. - Deep-linkable identity lives in PATH PARAMS, never in
state.extra.extrais a live Dart object: it isnullon a cold start from a deep link and after process death / restoration. A screen that needs an id to rebuild must read it fromstate.pathParametersso the URL alone fully reconstructs the screen. state.extrais ONLY an optional non-identity optimisation (a pre-fetched object to avoid a reload flash). The screen must still work — refetch by id — whenextraisnull.- Use
context.goto replace the stack (declarative destinations, tabs, post-login home); usecontext.pushto stack a screen you expect to pop back from (a detail, a modal flow). Mixing them wrong breaks the back button. Know which one every call site needs. - Guards are PURE
redirectfunctions.redirectreturns a new locationString?(ornullto allow) fromGoRouterState+ a snapshot of app state. No I/O, no navigation calls, no side effects insideredirect— it runs on every navigation and can run repeatedly. - Reactive guards use a
refreshListenable, not polling. Bridge the Riverpod auth/onboarding provider to aListenable; the router re-evaluatesredirectwhenever it fires. Seestate-management-riverpod. - Redirects must be loop-free. Always allow the destination the guard sends you TO (e.g. never redirect
/sign-inback to/sign-in). Guard againstA→B→Aby checking the current location before redirecting. - Tab/branch shells use
StatefulShellRoute.indexedStack. It preserves each branch's navigation stack and state across tab switches; a plainShellRoutewith anIndexedStackyou wire by hand does not survive router rebuilds as cleanly. Switch branches withnavigationShell.goBranch(index). - Custom transitions go through
CustomTransitionPageand respect reduced motion. When the platform requests reduced motion, collapse to a no-op/fade. Read the flag fromMediaQuery, resolve motion via the design system — seeaccessibility-as-codeanddesign-system-structure. - Intercept back / unsaved changes with
PopScope, notWillPopScope(removed). SetcanPop: falseand handle inonPopInvokedWithResult(bool didPop, T? result); only navigate away after the user confirms. - Provide an
errorBuilderand a real 404/error route. An unmatched deep link must land on a designed error screen, never a red error box. - Never hold a
BuildContextacross anawaitbefore navigating. CaptureGoRouter.of(context)(or the router) before the await, or guard withcontext.mountedafter. Seeasync-safety. - A feature does not build its own router.
scaffold-feature-moduleregisters a feature'sGoRouteINTO this router's route list; features never instantiateGoRouter.
What ships with it
7 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago First seen · 158 lines · 175 tokens per session scan A 9cc763e3c1f8
navigation-and-routing is a skill published in the GitHub repository zakariaf/Flutter-Skills (2 stars, last pushed 14d ago), licensed MIT. It adds 175 tokens to every session and 2,360 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
animations
Best practices for Flutter animations using the built-in animation framework, covering implicit animations, explicit AnimationController animations, page transitions, and Material 3 motion tokens. Use when creating, modifying, or reviewing animations, transitions, motion, or animated widgets, and also for custom route…
android-compose-migration
Migrate an Android XML View to Jetpack Compose following a structured 10-step workflow. Use when converting XML layouts to Compose, setting up Compose in an existing View-based project, or incrementally adopting Compose.
android-compose
Build high-performance declarative UI with Jetpack Compose. Use when writing Composable functions, optimizing recomposition, hoisting state, or working with LazyColumn and side effects; defer deep-link and navigation routing to android-navigation.
flutter-navigation
Implement navigation patterns with gorouter, deep linking, and named routes in Flutter. Use when building navigation, deep linking, or routing.
android-xml-views
Implement ViewBinding, RecyclerView, and XML layouts correctly on Android. Use when changing XML view binding or RecyclerView behavior, including its item animations and layout managers; defer standalone animation or layout-manager questions unrelated to RecyclerView.
maptiler
Expert coding skill for the full MapTiler platform — Cloud REST APIs, MapTiler SDK JS (built on MapLibre GL JS), native mobile SDKs, on-premise infrastructure, and vector tile schemas. USE WHEN the user wants to add a map to a web or mobile app, show locations or routes, display geographic data, build a store locator…