call method Null safety
- Request request
Shelf Handler
final swaggerHandler = SwaggerUI(
'swagger/swagger.yaml',
title: 'Ship API',
deepLink: true,
);
var server = await io.serve(swaggerHandler, '0.0.0.0', 4000);
Implementation
FutureOr<Response> call(Request request) {
final file = File(fileSchemaPath);
final mainSpec = basename(file.path);
final dirParent = file.parent;
final uri = request.url;
final path = uri.path;
if (path.contains('yaml') || path.contains('json')) {
var filePath = _resolveFilePath(dirParent, path);
final file = File(filePath);
return Response.ok(file.readAsBytesSync());
}
return Response.ok(headers: {
HttpHeaders.contentTypeHeader: ContentType('text', 'html', charset: 'utf-8').toString(),
}, '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta
name="description"
content="SwaggerUI"
/>
<title>$title</title>
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@4.5.0/swagger-ui.css" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist@4.5.0/swagger-ui-bundle.js" crossorigin></script>
<script>
window.onload = () => {
window.ui = SwaggerUIBundle({
dom_id: '#swagger-ui',
docExpansion: '${docExpansion.name}',
deepLinking: $deepLink,
url: "$mainSpec",
syntaxHighlight: {
activate: true,
theme: '${syntaxHighlightTheme.theme}',
},
persistAuthorization: $persistAuthorization,
});
};
</script>
</body>
</html>
''');
}