Agent skill

Unyo Routing Navigation

by K3vinb5 in K3vinb5/unyo-app

How to add routes, configure navigation, and use AutoRoute in the Unyo Flutter app.

BSD-3-ClauseAuto-check passedDevelopment

Install Unyo Routing Navigation

skills CLI
$ npx skills add K3vinb5/unyo-app --skill unyo-routing-navigation -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install K3vinb5/unyo-app unyo-routing-navigation --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/K3vinb5/unyo-app.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/unyo-routing-navigation .claude/skills/unyo-routing-navigation && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
unyo-routing-navigation
GitHub stars
664
Token cost
~2.5k tokens
SKILL.md length
594 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
BSD-3-Clause

At a glance

How to add routes, configure navigation, and use AutoRoute in the Unyo Flutter app.

  • Works in 3 steps: LoginRoute — the initial/auth screen → TabsRoute — contains nested tab children… → Detail routes — pushed on top of the tab…
  • Adding new screens/routes
  • SKILL.md covers Architecture Overview, Route Configuration, Adding a New Route and Route Transition Styles, plus 5 more sections
  • Calls flutter

What it does

Unyo Routing Navigation is an agent skill from K3vinb5/unyo-app. How to add routes, configure navigation, and use AutoRoute in the Unyo Flutter app. Use this skill whenever adding new screens/routes, configuring nested tab navigation, defining route transitions, navigating between screens from cubits via effects, or debugging routing issues like "route not found" errors.

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development. It works with Flutter. The repository describes itself as: 🐙 Anime streaming and Manga reader desktop app without ads. The licence is BSD-3-Clause.

When your agent uses it

  • Adding new screens/routes
  • Configuring nested tab navigation
  • Defining route transitions
  • Navigating between screens from cubits via effects

Example prompts

  • “route not found”
  • “/unyo-routing-navigation”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. LoginRoute — the initial/auth screen
  2. TabsRoute — contains nested tab children (Home, Anime, Manga, Extensions, Settings)
  3. Detail routes — pushed on top of the tab navigator (MediaList, AnimeDetails, MangaDetails, Video, Calendar, AdvancedSearch)

What it can do on your machine

Read from SKILL.md and the folder at commit 0a44722. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • flutter

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Unyo Routing Navigation loads about 2.5k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 594 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~83
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from K3vinb5/unyo-app at commit 0a44722, republished under its BSD-3-Clause licence (© K3vinb5). 594 words, ~2,547 tokens.

Download SKILL.mdSave it as .claude/skills/unyo-routing-navigation/SKILL.md (or your agent's skills folder).
name
unyo-routing-navigation
description
How to add routes, configure navigation, and use AutoRoute in the Unyo Flutter app. Use this skill whenever adding new screens/routes, configuring nested tab navigation, defining route transitions, navigating between screens from cubits via effects, or debugging routing issues like "route not found" errors.

Unyo Routing & Navigation

Unyo uses AutoRoute for type-safe declarative routing. Routes are defined in a single AppRouter class, and code generation creates the .gr.dart file with typed route pages. Navigation from cubits uses the Effect system rather than direct BuildContext.

Architecture Overview

lib/core/router/
├── app_router.dart       # Route definitions (the source of truth)
└── app_router.gr.dart    # Generated file (DO NOT EDIT)

The router is instantiated once in main.dart:

dart
final _appRouter = AppRouter();

And used in MaterialApp.router():

dart
MaterialApp.router(
  routerConfig: _appRouter.config(),
)

Route Configuration

All routes are defined in lib/core/router/app_router.dart as a nested tree:

dart
@AutoRouterConfig(replaceInRouteName: 'Screen|Page,Route')
class AppRouter extends RootStackRouter {
  @override
  List<AutoRoute> get routes => [
    CustomRoute(
      page: RootRoute.page,
      path: '/',
      transitionsBuilder: TransitionsBuilders.noTransition,
      duration: Duration.zero,
      reverseDuration: Duration.zero,
      children: [
        // Tab-level routes (inside AutoTabsRouter)
        CustomRoute(page: LoginRoute.page, path: 'login', initial: true, ...),
        CustomRoute(page: TabsRoute.page, path: 'tabs', children: [
          CustomRoute(page: HomeRoute.page, path: 'home', ...),
          CustomRoute(page: AnimeRoute.page, path: 'anime', ...),
          CustomRoute(page: MangaRoute.page, path: 'manga', ...),
          CustomRoute(page: ExtensionsRoute.page, path: 'extensions', ...),
          CustomRoute(page: SettingsRoute.page, path: 'settings', ...),
        ]),
        // Detail/push routes (outside tabs, overlaid on top)
        CustomRoute(page: MediaListRoute.page, path: 'userlist', ...),
        CustomRoute(page: AnimeDetailsRoute.page, path: 'animedetails', ...),
        CustomRoute(page: VideoRoute.page, path: 'video', ...),
      ],
    ),
  ];
}
Route structure

The app has a RootRoute that contains:

  1. LoginRoute — the initial/auth screen
  2. TabsRoute — contains nested tab children (Home, Anime, Manga, Extensions, Settings)
  3. Detail routes — pushed on top of the tab navigator (MediaList, AnimeDetails, MangaDetails, Video, Calendar, AdvancedSearch)

The nested structure means tab routes and detail routes are siblings under Root, creating a proper navigation stack.

replaceInRouteName: 'Screen|Page,Route'

This tells AutoRoute to strip Screen or Page from class names and replace with Route. So HomeScreen becomes HomeRoute, TabsScreen becomes TabsRoute.

Adding a New Route

Example: Adding a "Studio Details" screen

1. Create the screen widget with @RoutePage() annotation:

dart
// lib/presentation/screens/studio_details_screen.dart
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:unyo/application/cubits/studio_details_cubit.dart';
import 'package:unyo/application/states/studio_details_state.dart';
import 'package:unyo/core/di/locator.dart';
import 'package:unyo/core/services/effects/app_effect_handler.dart';

@RoutePage()
class StudioDetailsScreen extends StatelessWidget {
  const StudioDetailsScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => sl<StudioDetailsCubit>(),
      child: const _StudioDetailsListener(),
    );
  }
}

class _StudioDetailsListener extends StatelessWidget {
  const _StudioDetailsListener();

  @override
  Widget build(BuildContext context) {
    return BlocListener<StudioDetailsCubit, StudioDetailsState>(
      listener: (context, state) {
        if (state.effects.isNotEmpty) {
          sl<AppEffectHandler>().handleEffects(
            context,
            state.effects,
            context.read<StudioDetailsCubit>().clearEffects,
          );
        }
      },
      child: BlocBuilder<StudioDetailsCubit, StudioDetailsState>(
        builder: (context, state) {
          // Build UI here
          return const SizedBox.shrink();
        },
      ),
    );
  }
}

2. Add the route to AppRouter:

dart
// In app_router.dart, add as a child of RootRoute (sibling to TabsRoute)
CustomRoute(
  page: StudioDetailsRoute.page,
  path: 'studiodetails',
  transitionsBuilder: TransitionsBuilders.slideLeftWithFade,
  duration: const Duration(milliseconds: 250),
  reverseDuration: const Duration(milliseconds: 250),
),

3. Run code generation:

sh
flutter pub run build_runner build --delete-conflicting-outputs

This generates the StudioDetailsRoute class in app_router.gr.dart.

4. Navigate to it from a cubit:

dart
// In a cubit that has access to the StudioNotifier
void navigateToStudioDetails(Studio studio) {
  _studioNotifier.updateSelectedStudio(studio);
  pushRouteEffect(path: "/studiodetails");
}

Route Transition Styles

The app uses different transitions for different route types:

Route TypeTransitionDuration
Tab routesnoTransition0ms
Login/TabsnoTransition0ms
MediaListSlide up + Fade250ms
CalendarslideRightWithFade250ms
Search screensslideLeftWithFade250ms
Detail screensScale + Fade250ms
VideoScale + Fade250ms

Convention: Tab navigation is instant (no transition). Push routes use 250ms transitions for visual feedback.

Custom transition example (Scale + Fade for detail screens):
dart
CustomRoute(
  page: AnimeDetailsRoute.page,
  path: 'animedetails',
  transitionsBuilder: (context, animation, secondaryAnimation, child) =>
      ScaleTransition(
        scale: CurvedAnimation(parent: animation, curve: Curves.decelerate),
        child: FadeTransition(
          opacity: CurvedAnimation(parent: animation, curve: Curves.easeInCubic),
          child: child,
        ),
      ),
  duration: const Duration(milliseconds: 250),
  reverseDuration: const Duration(milliseconds: 250),
),

Navigation from Cubits

Cubits never hold BuildContext or call AutoRouter directly. Instead, they emit navigation effects:

dart
// Push a route onto the stack
pushRouteEffect(path: "/animedetails");

// Replace the current route (e.g., after login, go to tabs)
replaceRouteEffect(path: "/tabs");

// Navigate to a path (within nested routers)
navigateRouteEffect(path: "/tabs");

// Switch tabs in AutoTabsRouter
changeRouteTabEffect(context, path: "/anime");

// Pop the current route
popRouteEffect(context);

The AppEffectHandler processes these effects on the UI side. See unyo-bloc-state-management skill for how effects work.

Tab Navigation

The TabsRoute uses AutoTabsRouter in its screen widget to manage tab switching:

dart
// In tabs_screen.dart
AutoTabsRouter(
  lazyLoad: true,
  routes: const [
    HomeRoute(),
    AnimeRoute(),
    MangaRoute(),
    ExtensionsRoute(),
    SettingsRoute(),
  ],
  builder: (context, child) {
    // The child is the currently active tab's content
    return Row(
      children: [
        SideMenuBar(...),
        Expanded(child: child),
      ],
    );
  },
)

Switching tabs from a cubit:

dart
// In TabsCubit
void selectMenuOption(SelectedMenuOption option, BuildContext context) {
  emit(state.copyWith(selectedMenuOption: option));
  changeRouteTabEffect(context, path: _optionToPath(option));
}

The EffectMixin maps tab paths to indices:

dart
static const Map<String, int> _routesIndexMapper = {
  "/home": 0,
  "/anime": 1,
  "/manga": 2,
  "/extensions": 3,
  "/settings": 4,
};

If you add a new tab, you must update this mapper.

Show full SKILL.md (268 more words)Show less

Passing Data Between Routes

Unyo does NOT use route parameters/arguments. Instead, it uses the Notifier pattern to pass data between screens:

  1. Source cubit pushes data into a notifier (e.g., _animeNotifier.updateSelectedAnime(anime))
  2. Source cubit navigates via effect (e.g., pushRouteEffect(path: "/animedetails"))
  3. Destination cubit subscribes to the notifier stream and reacts

This is intentional — it decouples routes from data types and avoids the complexity of typed route arguments in AutoRoute.

Common Pitfalls

  • Forgetting @RoutePage(): Every screen that AutoRoute should manage must have this annotation. Without it, code generation won't create the route page class.
  • Forgetting to run build_runner: After adding or modifying routes, you MUST run flutter pub run build_runner build --delete-conflicting-outputs. The .gr.dart file is auto-generated.
  • Editing .gr.dart directly: Never manually edit generated files. Changes will be overwritten.
  • Adding a tab route as a push route: Tab routes must be children of the TabsRoute in the route tree, not siblings of it. If you add a tab route as a sibling of TabsRoute, it will navigate as a push route instead of a tab switch.
  • Using AutoRouter.of(context).push() in cubits: Cubits should not access BuildContext for navigation. Use the Effect system instead.
  • Not updating _routesIndexMapper: When adding a new tab, update the index mapper in EffectMixin or changeRouteTabEffect won't find the correct tab index.
  • Path mismatch: The path in the route definition must match the path used in effects (e.g., path: 'animedetails' in router matches pushRouteEffect(path: "/animedetails") in cubit — note the leading / in effects).

Cross-references

  • Effect system for navigation: See unyo-bloc-state-management skill
  • Screen widget structure: See unyo-ui-presentation skill for BlocProvider/BlocListener/BlocBuilder patterns
  • Notifier pattern for passing data: See unyo-reactive-notifiers skill

© K3vinb5, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/unyo-routing-navigation of K3vinb5/unyo-app.

Open the folder on GitHubat commit 0a44722

Compare with similar skills

Unyo Routing Navigation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Unyo Routing Navigation compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Unyo Routing Navigation this skillK3vinb5/unyo-app664—~2.5kAutomated safety check: PassBSD-3-Clause
Code Reviewflutter/flutter179k—~1.4kAutomated safety check: PassBSD-3-Clause
Senior Architect Toolkitmaslennikov-ig/claude-code-orchestrator-kit2608 repos~1.2kAutomated safety check: NotesCustom licence
Code Review Skillawesome-skills/code-review-skill2.1k—~2.8kAutomated safety check: NotesMIT
Adding Release Notesflutter/devtools1.7k—~1kAutomated safety check: PassBSD-3-Clause
Code Guidelinesgetsentry/sentry-dart873—~2.2kAutomated safety check: PassMIT

Similar skills

  • Code Review

    flutter/flutter

    Performs a comprehensive, multi-step code review of pull requests or local code changes, using iterative refinement (generation, critique, synthesis) to ensure high-quality, actionable feedback.

    179k GitHub stars~1.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Senior Architect Toolkit

    maslennikov-ig/claude-code-orchestrator-kit

    Comprehensive software architecture skill for designing scalable, maintainable systems using ReactJS, NextJS, NodeJS, Express, React Native, Swift, Kotlin…

    260 GitHub starsUsed in 8 repos~1.2k tokens
    DevelopmentAuto-check: notes
  • Code Review Skill

    awesome-skills/code-review-skill

    Provides comprehensive code review guidance for React 19, Vue 3, Angular 17+, Svelte 5, Rust, TypeScript, Java, Java 8, PHP, Ruby, Rails, Python, Django, FastAPI, Go, C/.NET, Kotlin, Swift, Dart…

    2.1k GitHub stars~2.8k tokensUpdated 1 mo ago
    DevelopmentAuto-check: notes
  • Adding Release Notes

    flutter/devtools

    Adds user-facing change descriptions to DevTools release notes.

    1.7k GitHub stars~1k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Code Guidelines

    getsentry/sentry-dart

    Official

    Enforce Sentry Dart/Flutter SDK code guidelines for implementation, refactoring, and review.

    873 GitHub stars~2.2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Automate git worktree creation and copy private files (not tracked in git) to new workdirs.

    155 GitHub stars~930 tokensUpdated 3 mo ago
    DevelopmentAuto-check passed

More from K3vinb5/unyo-app

  • Generate Dart bean classes from JSON and regenerate serialization helpers using the fjson CLI.

    664 GitHub stars~2.2k tokensUpdated 4 mo ago
    Auto-check passed
  • How to create cubits, define states, use the EffectMixin pattern, and handle side effects in the Unyo Flutter app.

    664 GitHub stars~3.2k tokensUpdated 4 mo ago
    Auto-check passed
  • How to register and resolve dependencies using GetIt in the Unyo Flutter app.

    664 GitHub stars~2.4k tokensUpdated 4 mo ago
    Auto-check passed
  • Unyo Domain Data Layer

    K3vinb5/unyo-app

    How to create domain entities, data models, and repositories in the Unyo Flutter app.

    664 GitHub stars~2.9k tokensUpdated 4 mo ago
    Auto-check passed
  • Unyo Reactive Notifiers

    K3vinb5/unyo-app

    How to create and use RxDart BehaviorSubject notifiers for cross-cubit communication in the Unyo Flutter app.

    664 GitHub stars~2.8k tokensUpdated 4 mo ago
    Auto-check passed
  • Unyo UI Presentation

    K3vinb5/unyo-app

    How to build screens, widgets, and handle effects in the Unyo Flutter app's presentation layer.

    664 GitHub stars~3k tokensUpdated 4 mo ago
    Auto-check passed

Works with

Categories

Questions about Unyo Routing Navigation

What does Unyo Routing Navigation do?

How to add routes, configure navigation, and use AutoRoute in the Unyo Flutter app. Unyo Routing Navigation is an agent skill from K3vinb5/unyo-app. How to add routes, configure navigation, and use AutoRoute in the Unyo Flutter app.

When should I use Unyo Routing Navigation?

Unyo Routing Navigation fits situations like: adding new screens/routes; configuring nested tab navigation; defining route transitions; navigating between screens from cubits via effects.

How do I install Unyo Routing Navigation in Claude Code?

Run `npx skills add K3vinb5/unyo-app --skill unyo-routing-navigation -a claude-code`. Or copy the skill folder (.agents/skills/unyo-routing-navigation in K3vinb5/unyo-app) into .claude/skills/unyo-routing-navigation in your project. Claude Code loads it when a task matches its description.

How do I install Unyo Routing Navigation in Codex?

Run `npx skills add K3vinb5/unyo-app --skill unyo-routing-navigation -a codex`. Or copy the skill folder (.agents/skills/unyo-routing-navigation in K3vinb5/unyo-app) into .agents/skills/unyo-routing-navigation in your project. Codex loads it when a task matches its description.

Can I use Unyo Routing Navigation in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add K3vinb5/unyo-app --skill unyo-routing-navigation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/unyo-routing-navigation, .gemini/skills/unyo-routing-navigation, .github/skills/unyo-routing-navigation and .opencode/skills/unyo-routing-navigation in your project.

What does Unyo Routing Navigation need to run?

Going by SKILL.md and its folder, Unyo Routing Navigation needs the command-line tools its instructions call (flutter).

Does Unyo Routing Navigation access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Unyo Routing Navigation safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Unyo Routing Navigation use?

Unyo Routing Navigation is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Unyo Routing Navigation use?

About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Unyo Routing Navigation?

Skills that share tags, products or a category with Unyo Routing Navigation: Code Review (flutter/flutter, 179k stars), Senior Architect Toolkit (maslennikov-ig/claude-code-orchestrator-kit, 260 stars), Code Review Skill (awesome-skills/code-review-skill, 2.1k stars) and Adding Release Notes (flutter/devtools, 1.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Unyo Routing Navigation?

K3vinb5 (a GitHub user) maintains it in K3vinb5/unyo-app, which has 664 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on June 12, 2026.

Source: K3vinb5/unyo-app on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.