🛣️ Routing
If you are building a backend with Dart, Flint Dart offers one of the cleanest and most powerful routing systems. It allows you to define routes, add middleware for authentication or validation, and organize your code into route groups for scalable APIs.
Flint Dart makes it easy to define routes, attach middleware directly to them, and organize them into separate files for cleaner, maintainable code.
Basic Route
import 'package:flint_dart/flint_dart.dart';
void main() {
final app = Flint();
app.get('/', (req, res) async {
res.send('Hello from Flint Dart!');
});
app.listen(3000);
}
Route with Middleware
You can attach middleware to a single route using .useMiddleware()
. This makes it easy to protect specific endpoints without applying middleware globally.
import 'package:flint_dart/flint_dart.dart';
import 'package:sample/src/middleware/auth_middleware.dart';
void main() {
final app = Flint();
app.get('/profile', (req, res) async {
return res.json({'msg': 'This is a protected route'});
}).useMiddleware(AuthMiddleware());
app.listen(3000);
}
Mounting Routes
You can split routes into separate files and mount them using app.mount()
.
import 'package:flint_dart/flint_dart.dart';
import 'package:sample/src/routes/auth_routes.dart';
import 'package:sample/src/routes/user_routes.dart';
void main() {
final app = Flint();
app.get('/', (req, res) async {
return res.send('Hello from FlintDart!');
});
app.mount("/users", registerUserRoutes);
app.mount("/auth", authRoutes);
app.listen(3000);
}
Example: Auth Routes
import 'package:flint_dart/flint_dart.dart';
import 'package:sample/src/controllers/auth_controller.dart';
import 'package:sample/src/middleware/auth_middleware.dart';
void authRoutes(Flint app) {
final authController = AuthController();
app.post("/register", authController.register);
app.post("/login", authController.login);
app.post("/me", authController.profile)
.useMiddleware(AuthMiddleware()); // protected route
}
Example: User Routes
import 'package:flint_dart/flint_dart.dart';
import '../controllers/user_controller.dart';
void registerUserRoutes(Flint app) {
final controller = UserController();
app.get('/', controller.index);
app.get('/:id', controller.show);
app.post('/', controller.create).useMiddleware(AuthMiddleware());
app.put('/:id', controller.update).useMiddleware(AuthMiddleware());
app.delete('/:id', controller.delete).useMiddleware(AuthMiddleware());
}