✅ Data Validation in Flint Dart
Flint Dart provides powerful validation utilities to ensure your request data meets expected formats before processing. You can validate directly in handlers, use the new req.validate()
shortcut, or create reusable middleware.
Simple Validation with req.validate()
Instead of writing try/catch
blocks, you can callreq.validate()
. If validation fails, Flint automatically catches the ValidationException
and responds with an error.
Future<void> register(Request req, Response res) async {
final body = await req.validate({
"name": "required|string|min:3",
"email": "required|string|email",
"password": "required|string|min:8"
});
// Password hashing after validation
body["password"] = Hashing().hash(body["password"]);
final user = await User().create(body);
res.json({"status": "success", "data": user.toMap()});
}
✅ Cleaner syntax, no boilerplate error handling. Flint takes care of responding with 422 Unprocessable Entity
and error details.
Validator.validate (Manual)
For full control, you can still use Validator.validate()
with your own try/catch
handling.
try {
final body = await req.json();
await Validator.validate(body, {
"email": "required|string|email|min:3",
"name": "required|string|min:5",
"password": "required|string|min:8"
});
// ...
} on ValidationException catch (e) {
res.status(422).json({"errors": e.errors});
}
Reusable ValidationMiddleware
If multiple routes share the same rules, extract validation logic into middleware.
class ValidationMiddleware extends Middleware {
final Map<String, String> rules;
ValidationMiddleware(this.rules);
@override
Handler handle(Handler next) {
return (Request req, Response res) async {
final data = await req.validate(rules); // Auto-error handling
req.attributes["validated"] = data; // Store validated data
await next(req, res);
};
}
}
Applying ValidationMiddleware
void registerUserRoutes(Flint app) {
app.post(
'/register',
ValidationMiddleware({
"email": "required|string|email",
"name": "required|string|min:5",
"password": "required|string|min:8",
}).handle((req, res) async {
final body = req.attributes["validated"];
body["password"] = Hashing().hash(body["password"]);
final user = await User().create(body);
res.json({"status": "success", "data": user.toMap()});
}),
);
}