buildScene method Null safety

Scene buildScene (
  1. SceneBuilder builder
)

Consider this layer as the root and build a scene (a tree of layers) in the engine.

Implementation

// The reason this method is in the `ContainerLayer` class rather than
// `PipelineOwner` or other singleton level is because this method can be used
// both to render the whole layer tree (e.g. a normal application frame) and
// to render a subtree (e.g. `OffsetLayer.toImage`).
ui.Scene buildScene(ui.SceneBuilder builder) {
  List<PictureLayer>? temporaryLayers;
  assert(() {
    if (debugCheckElevationsEnabled) {
      temporaryLayers = _debugCheckElevations();
    }
    return true;
  }());
  updateSubtreeNeedsAddToScene();
  addToScene(builder);
  // Clearing the flag _after_ calling `addToScene`, not _before_. This is
  // because `addToScene` calls children's `addToScene` methods, which may
  // mark this layer as dirty.
  _needsAddToScene = false;
  final ui.Scene scene = builder.build();
  assert(() {
    // We should remove any layers that got added to highlight the incorrect
    // PhysicalModelLayers. If we don't, we'll end up adding duplicate layers
    // or continuing to render stale outlines.
    if (temporaryLayers != null) {
      for (final PictureLayer temporaryLayer in temporaryLayers!) {
        temporaryLayer.remove();
      }
    }
    return true;
  }());
  return scene;
}