dash_router_generator 1.0.1 copy "dash_router_generator: ^1.0.1" to clipboard
dash_router_generator: ^1.0.1 copied to clipboard

Code generator for dash_router - generates type-safe route code from annotations.

dash_router_generator #

pub package License: MIT

Code generator for dash_router. Generates type-safe route code from @DashRoute annotations.

Features #

  • 🔧 CLI-Based Generation - Fast code generation without build_runner overhead
  • 📁 Per-Route Info Files - Generates separate files for each route's type info
  • 🎯 Type-Safe Navigation - Generates navigation extensions with full type safety
  • 🔄 Watch Mode - Auto-regenerate on file changes
  • ⚙️ Configurable - Customize output paths and generation options

Installation #

Add to your pubspec.yaml:

dev_dependencies:
  dash_router_generator: ^1.0.0
  dash_router_cli: ^1.0.0

Usage #

CLI Generation #

# Generate routes
dart run dash_router_cli generate

# Watch for changes
dart run dash_router_cli watch

# Dry run (preview without writing)
dart run dash_router_cli generate --dry-run

Configuration #

Create dash_router.yaml in your project root:

dash_router:
  scan:
    - "lib/**/*.dart"
  generate:
    output: "lib/generated/routes.dart"
    route_info_output: "lib/generated/route_info/"
  options:
    generate_navigation: true
    generate_typed_routes: true
    generate_route_info: true

Generated Code #

The generator produces:

  1. Routes File (routes.dart)

    • generatedRoutes - List of all route entries
    • generatedRedirects - List of redirect entries
  2. Route Info Files (per route)

    • Type-safe parameter access extensions
    • Route pattern checking
  3. Navigation Extensions

    • context.pushUserPage(id: '123')
    • context.replaceWithHomePage()
    • etc.

Example Generated Code #

For a route defined as:

@DashRoute(
  path: '/user/:id',
  arguments: [UserData],
)
class UserPage extends StatelessWidget { ... }

The generator produces:

// In route_info/user_$id.route.dart
extension User$IdRouteInfoX on ScopedRouteInfo {
  bool get isUser$IdRoute => pattern == '/user/:id';
  UserData get typedBody => body.arguments as UserData;
}

// Navigation extensions
extension UserPageNavigation on BuildContext {
  Future<T?> pushUserPage<T>({required String id, UserData? userData}) { ... }
  Future<T?> replaceWithUserPage<T>({required String id}) { ... }
}

API Reference #

See the API documentation for complete details.

License #

MIT License - See LICENSE for details.