dash_router_generator 1.1.1
dash_router_generator: ^1.1.1 copied to clipboard
Code generator for dash_router - generates type-safe route code from annotations.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.1.1 - 2025-12-21 #
Changed #
- Enhanced Code Documentation: Improved documentation accuracy and clarity across the codebase
1.1.0 - 2025-12-20 #
1.0.1 - 2025-12-14 #
1.0.0 - 2025-12-13 #
Added #
-
Initial stable release of dash_router_generator
-
CLI-based code generation via
CliCodegen:- Scans Dart files for
@DashRouteannotations - Generates type-safe route code automatically
- Supports configuration via
dash_router.yaml - Outputs generated files to configurable locations
- Scans Dart files for
-
Route visitor (
RouteVisitor):- Parses
@DashRouteannotations from source files - Extracts route configuration including path, name, parent, guards, middleware
- Supports all annotation variants:
@DashRoute- Standard page route@InitialRoute- Initial/home route@ShellRoute- Shell route for nested navigation@RedirectRoute- Redirect route@DialogRoute- Dialog route
- Parses
-
Parameter visitor (
ParamVisitor):- Analyzes constructor parameters for route pages
- Automatically infers parameter types:
- Path parameters (from
:paramin route path) - Query parameters (inferred from parameter position)
- Body parameters (complex types passed via navigation)
- Path parameters (from
- Supports optional parameters with default values
- Handles nullable types correctly
-
Code generation templates:
RouteTemplate- GeneratesRoutesclass with all route entries as static constantsNavigationTemplate- Generates type-safe navigation extensions for BuildContextTypedRouteTemplate- Generates typed route classes with$-prefixed API:- Path-based class naming:
/app/user/:id→AppUser$IdRoute - Generated properties:
$pattern,$name,$path,$query,$body,$transition
- Path-based class naming:
RouteInfoTemplate- Generates route info extensions for parameter access from RouteData
-
Path-based route class naming convention:
- Route classes are named based on their path, not the page class name
- Path segments are converted to PascalCase
- Path parameters use
$prefix::id→$Id - Examples:
/app/home→AppHomeRoute/app/user/:id→AppUser$IdRoute/app/catalog/:category/:subcategory/:itemId→AppCatalog$Category$Subcategory$ItemIdRoute
-
$-prefixed property API:- All generated route properties use
$prefix to avoid conflicts with user parameters $pattern- The route pattern with parameter placeholders$name- The unique route name$path- The resolved path with parameters substituted$query- Query parameters map$body- Body data object$transition- Page transition configuration
- All generated route properties use
-
Configuration support:
OutputConfig- Configure output file locations- Support for
dash_router.yamlconfiguration file:dash_router: output: routes: lib/generated/routes.dart typed_routes: lib/generated/typed_routes.dart navigation: lib/generated/navigation.dart route_info: lib/generated/route_info.dart
-
Utility classes:
CodeFormatter- Format generated code using dart_styleTypeResolver- Resolve and analyze Dart typesStringUtils- String manipulation utilities for code generation
-
Model classes:
RouteConfigModel- Route configuration dataParamConfigModel- Parameter configuration dataRouteInfoModel- Route tree information
API Design #
The generator creates route classes that follow these conventions:
// Generated from: @DashRoute('/app/user/:id')
class AppUser$IdRoute extends DashTypedRoute {
const AppUser$IdRoute({
required this.id,
this.tab,
this.userData,
this.transition,
});
final String id;
final String? tab;
final UserData? userData;
@override
final DashTransition? transition;
@override
String get $pattern => '/app/user/:id';
@override
String get $name => 'user';
@override
String get $path => '/app/user/$id';
@override
Map<String, dynamic> get $query => {
if (tab != null) 'tab': tab,
};
@override
Object? get $body => userData;
}