fiber_router_gen 1.5.0 copy "fiber_router_gen: ^1.5.0" to clipboard
fiber_router_gen: ^1.5.0 copied to clipboard

Code generator for fiber_router - produces typed BuildContext navigation extensions from your PoppinRouter definition. Run once, navigate anywhere.

fiber_router_gen #

Code generator for fiber_router - produces typed BuildContext navigation extensions from your FiberRouter definition.


Features #

  • Generates a ContextRouter extension on BuildContext with typed getters for every route
  • Supports view, node, shell, controller, and deeplink route nodes
  • Shell routes expose their children directly on the parent class
  • Controller routes generate a named context class with a ControllerRouter<T> get controller getter
  • Generates a shared FiberRouterBase<T> with GoRouter, ShellRouter, and ControllerRouter subclasses
  • Generates Parameters classes with toQuery() / fromMap() for deeplink routes
  • Filters imports automatically - only what the generated file actually needs

Installation #

Add as a dev dependency (it's a CLI tool, not a runtime dependency):

dev_dependencies:
  fiber_router_gen: ^1.0.0

Usage #

1. Annotate your router #

import 'package:fiber_router/fiber_router.dart';

@FiberRouterGen()
final router = FiberRouter.create(
  initialLocation: const HomeView(),
  nodes: [
    FiberRouteNode.view<HomeView, Null>(
      builder: (_, __) => const HomeView(),
    ),
    FiberRouteNode.node(
      name: 'dashboard',
      main: FiberRouteNode.view<DashboardView, Null>(
        builder: (_, __) => const DashboardView(),
      ),
      routes: [
        FiberRouteNode.view<SettingsView, Null>(
          builder: (_, __) => const SettingsView(),
        ),
      ],
    ),
    FiberRouteNode.shell(
      builder: (context, child) => AuthShell(child: child),
      routes: [
        FiberRouteNode.view<SignInView, Null>(
          builder: (_, __) => const SignInView(),
        ),
        FiberRouteNode.view<OtpView, OtpParameters>(
          builder: (_, params) => OtpView(token: params?.token ?? ''),
        ),
      ],
    ),
  ],
);

2. Run the generator #

dart run fiber_router_gen lib/src/router/router.dart

By default the output is written next to the input file as router.g.dart. You can specify a custom output path:

dart run fiber_router_gen lib/src/router/router.dart lib/src/router/router.g.dart

3. Use the generated code #

// Simple view
context.router.home.go();

// Named group
context.router.dashboard.go();
context.router.dashboard.settings.go();

// Shell children - exposed directly on ContextRouter (no sub-class)
context.router.signIn.go();
context.router.otp.go(OtpParameters(token: token));

// Replace current route
context.router.home.go(replace: true);

Generated output #

For the router defined above, the generator produces:

extension BuildContextRouterExtension on BuildContext {
  ContextRouter get router => ContextRouter(this);
}

class ContextRouter {
  void go({bool replace = false}) => ...;  // home
  ContextRouterDashboard get dashboard => ContextRouterDashboard(this);

  // Shell children are inlined here - no AuthShell wrapper class
  GoRouter<SignInView> get signIn => ...;
  GoRouterParams<OtpView, OtpParameters> get otp => ...;
}

class ContextRouterDashboard {
  void go({bool replace = false}) => ...;
  GoRouter<SettingsView> get settings => ...;
}

class OtpParameters {
  final String token;
  const OtpParameters({required this.token});
}

Route node behaviour #

Node type Generator output
view<T, Null> GoRouter<T> getter with .go({replace})
view<T, P> GoRouterParams<T, P> getter with .go(params, {replace})
node(name, ...) Nested ContextRouter{Name} class
shell(...) Children inlined directly into the parent class
controller<T>(...) Nested ContextRouter{T} class with ControllerRouter<T> get controller and child getters
deeplink<T, P> Same as view<T, P> + generates toQuery() / fromMap() on P

Router helper hierarchy #

All generated router helpers extend a common base:

abstract class FiberRouterBase<T> {
  final String name;
}

class GoRouter<T> extends FiberRouterBase<T>           // view, push navigation
class GoRouterParams<T, P> extends FiberRouterBase<T>  // view with params
class ShellRouter<T> extends FiberRouterBase<T>        // shell child, replace navigation
class ShellRouterParams<T, P> extends FiberRouterBase<T>
class ControllerRouter<T> extends FiberRouterBase<T>   // controller entry point
class ControllerRouterParams<T, P> extends FiberRouterBase<T>

1
likes
120
points
78
downloads

Documentation

API reference

Publisher

verified publisherfiberstudio.app

Weekly Downloads

Code generator for fiber_router - produces typed BuildContext navigation extensions from your PoppinRouter definition. Run once, navigate anywhere.

Repository (GitHub)
View/report issues

Topics

#navigation #router #code-generation

License

unknown (license)

Dependencies

analyzer, change_case, path

More

Packages that depend on fiber_router_gen