call method Null safety

FutureOr<Response> call(
  1. 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>
''');
}