createMiddleware function
Creates a Middleware using the provided functions.
If provided, requestHandler receives a Request. It can respond to
the request by returning a Response or Future<Response>.
requestHandler can also return null for some or all requests in which
case the request is sent to the inner Handler.
If provided, responseHandler is called with the Response generated
by the inner Handler. Responses generated by requestHandler are not
sent to responseHandler.
responseHandler should return either a Response or
Future<Response>. It may return the response parameter it receives or
create a new response object.
If provided, errorHandler receives errors thrown by the inner handler. It
does not receive errors thrown by requestHandler or responseHandler, nor
does it receive HijackExceptions. It can either return a new response or
throw an error.
Implementation
Middleware createMiddleware({
FutureOr<Response?> Function(Request)? requestHandler,
FutureOr<Response> Function(Response)? responseHandler,
FutureOr<Response> Function(Object error, StackTrace)? errorHandler,
}) {
requestHandler ??= (request) => null;
responseHandler ??= (response) => response;
FutureOr<Response> Function(Object, StackTrace)? onError;
if (errorHandler != null) {
onError = (error, stackTrace) {
if (error is HijackException) throw error;
return errorHandler(error, stackTrace);
};
}
return (Handler innerHandler) {
return (request) {
return Future.sync(() => requestHandler!(request)).then((response) {
if (response != null) return response;
return Future.sync(() => innerHandler(request))
.then((response) => responseHandler!(response), onError: onError);
});
};
};
}