Yegor ac1d8613fc
[web:skwasm] be consistent about handling imbalanced layer push/pop sequence (#166887)
Skwasm was the only renderer that enforced that the root layer cannot be
popped. However, canvaskit and the native engines all allow popping the
root layer. It's just a noop.

Also, `EngineSceneBuilder` called `currentBuilder.build()` before
checking if the layer that's being popped is a root layer. This means
skwasm would call `rootLayer.build()` twice when push/pop are
unbalanced. It is called once on the last `pop()` on the root layer.
Then it is called again in `EngineSceneBuilder.build`.

Not a guarantee, but this may help reduce the skwasm error rates from
DevTools that look like this:

```
org-dartlang-sdk:///dart-sdk/lib/_internal/wasm/lib/error_utils.dart 130:15 | _throwIndexError
org-dartlang-sdk:///dart-sdk/lib/_internal/wasm/lib/error_utils.dart 24:7 | checkIndexBCE
org-dartlang-sdk:///lib/_engine/engine/scene_builder.dart 458:53 | pop
file:///b/s/w/ir/x/w/rc/flutter/packages/flutter/lib/src/rendering/layer.dart 1520:13 | addToScene
file:///b/s/w/ir/x/w/rc/flutter/packages/flutter/lib/src/rendering/layer.dart 721:5 | _addToSceneWithRetainedRendering
file:///b/s/w/ir/x/w/rc/flutter/packages/flutter/lib/src/rendering/layer.dart 1519:5 | addToScene
file:///b/s/w/ir/x/w/rc/flutter/packages/flutter/lib/src/rendering/layer.dart 721:5 | _addToSceneWithRetainedRendering
```
2025-04-10 17:09:07 +00:00
..
2025-03-25 04:29:28 +00:00

Flutter Engine

The Flutter Engine is a portable runtime for hosting Flutter applications. It implements Flutter's core libraries, including animation and graphics, file and network I/O, accessibility support, plugin architecture, and a Dart runtime and compile toolchain. Most developers will interact with Flutter via the Flutter Framework, which provides a modern, reactive framework, and a rich set of platform, layout and foundation widgets.

More tooling is available to make development experiences easier:

Target Tool
Web felt
Mobile or Desktop et

To learn about running tests, see testing the engine.