middleware static method

Future middleware(
  1. HttpRequest request,
  2. 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 to 2.
  • Requests without a _flashTrips binding 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();
}