responseDataHandler function

void responseDataHandler(
  1. dynamic payload,
  2. HttpRequest request
)

Handle response for different types of data such as string, stream, Model, List, encodable.

Implementation

void responseDataHandler(dynamic payload, HttpRequest request) {
  HttpResponse res = request.response;

  if (payload == null) {
    res.close();
    return;
  }

  /// if payload is stream
  if (payload is StreamFile) {
    res.headers.contentType = payload.contentType;
    res.addStream(payload.stream).then((_) => res.close());
    return;
  }

  /// if payload is downloadable file,
  /// we response contentDisposition header with stream data.
  if (payload is DownloadableFile) {
    res.headers.contentType = payload.contentType;
    res.headers.add(FILE_DOWNLOAD_HEADER, payload.contentDisposition);
    res.addStream(payload.stream).then((_) => res.close());
    return;
  }

  // if payload is stream
  if (payload is Stream<List<int>>) {
    res.addStream(payload).then((_) => res.close());
    return;
  }

  /// if payload handle base Http Exception
  /// we set http status from exception and return as map
  /// which will parse into json and response as json
  if (payload is IHttpException) {
    res.statusCode = payload.code;
    payload = payload.toResponse();
  }

  if (payload is Exception || payload is Error) {
    res.statusCode = HttpStatus.internalServerError;
    payload = payload.toString();
  }

  if (payload is DateTime) {
    payload = payload.toIso8601String();
  }

  String responseData;

  /// if payload is Map or List, parse into json
  /// and response as json
  if (payload is! String) {
    responseData = JSON.stringify(payload);
    res.headers.contentType = ContentType.json;
  } else {
    responseData = payload;
  }

  /// finally write and close http connection
  res.write(responseData);
  res.close();
}