render method

Future<Uint8List> render({
  1. bool standalone = false,
})

Implementation

Future<Uint8List> render({bool standalone = false}) async {
  final rootElement = this.rootElement;
  if (rootElement == null) return _emptyResponse;

  if (rootElement.owner.isFirstBuild) {
    final completer = Completer<void>.sync();
    rootElement.binding.addPostFrameCallback(completer.complete);
    await completer.future;
  }

  final root = rootElement.renderObject as MarkupRenderObject;

  // Not using for each to allow for new adapters to be added during iteration.
  for (var i = 0; i < _adapters.length; i++) {
    final r = _adapters[i].prepare();
    if (r is Future) {
      await r;
    }
  }

  for (final adapter in _adapters.reversed) {
    adapter.apply(root);
  }

  final document = standalone ? null : createDocumentStructure(root, true);

  if (_responseBodyOverride case final override?) {
    return override;
  }

  if (document != null && request.headers.singleValues['X-Jaspr-Reload'] == 'true') {
    return utf8.encode(document.body.renderToHtml());
  }

  return utf8.encode(root.renderToHtml());
}