fiber_router_gen 1.5.0
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
ContextRouterextension onBuildContextwith typed getters for every route - Supports
view,node,shell,controller, anddeeplinkroute nodes - Shell routes expose their children directly on the parent class
- Controller routes generate a named context class with a
ControllerRouter<T> get controllergetter - Generates a shared
FiberRouterBase<T>withGoRouter,ShellRouter, andControllerRoutersubclasses - Generates
Parametersclasses withtoQuery()/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>
Related packages #
fiber_router- the runtime package this generator targets