middleware static method
- HttpRequest request,
- Future<
void> next()
Processes flash-message lifecycle state for the current request.
This middleware uses the _flashTrips container binding to determine
whether flashed session data should be preserved or cleared.
Rules:
- Requests to
/api/paths bypass flash lifecycle handling. - When
_flashTrips == 2, flashed messages, validation errors, and old input data are cleared from the session. - When
_flashTrips == 1, the middleware promotes the counter to2. - Requests without a
_flashTripsbinding continue normally.
Parameters:
request: The active HTTP request.next: The next middleware or handler in the pipeline.
Example:
await FlashMessagingMiddleware.middleware(request, () async {
request.response.write('Continuing request pipeline');
});
Implementation
static Future<dynamic> middleware(HttpRequest request, Future<void> Function() next) async {
if(request.uri.path.startsWith('/api/')) {
return await next();
}
final flashTrip = App().container.tryMake<int>(name: "_flashTrips");
if (flashTrip != null) {
App().container.disposeBinding<int>(name: "_flashTrips");
if (flashTrip == 2) {
request.thisSession?.flashMessages = {};
request.thisSession?.errors = {};
request.thisSession?.data = {};
} else if (flashTrip == 1) {
App().container.bindInstance<int>(name: "_flashTrips", 2);
}
}
await next();
}