Flint DartFlint Dart

🛣️ 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());
}