mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
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 ```
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.