build method
Generates the outputs for a given BuildStep.
Implementation
@override
Future<void> build(BuildStep buildStep) async {
final routes = await findRoutes(buildStep);
final sortedRoutes = [...routes]
..sort((a, b) {
final aHasParams = a.path.contains('<');
final bHasParams = b.path.contains('<');
if (aHasParams == bHasParams) return a.path.compareTo(b.path);
return aHasParams ? 1 : -1; // static routes first
});
final library = Library((lib) {
lib.directives.add(
Directive.import('package:vanestack_common/vanestack_common.dart'),
);
// ====== RequestUtils extension ======
lib.body.add(_buildRequestUtilsExtension());
lib.body.add(_buildCleanParam());
// ====== Helper functions ======
lib.body.add(_buildStringToDartTypeFunction());
lib.body.add(_buildDefaultErrorHandlerFunction());
// ====== Route handlers ======
for (final (index, route) in sortedRoutes.indexed) {
lib.body.add(_buildRouteHandler(index, route));
}
// ====== registerRoutes() ======
lib.body.add(_buildRegisterRoutesFunction(sortedRoutes));
});
final emitter = DartEmitter.scoped();
final generatedCode = _dartFormatter.format(
'// GENERATED CODE - DO NOT MODIFY BY HAND\n\n${library.accept(emitter)}',
);
await buildStep.writeAsString(
AssetId(buildStep.inputId.package, 'lib/src/routes.dart'),
generatedCode,
);
// Also generate routes_info.dart with plain data for the generate command
final routesInfoCode = _buildRoutesInfo(sortedRoutes);
await buildStep.writeAsString(
AssetId(buildStep.inputId.package, 'lib/src/routes_info.dart'),
routesInfoCode,
);
}