- 29 Nov, 2023 1 commit
-
-
Michael Goderbauer authored
Towards https://github.com/flutter/flutter/issues/134501. This change is based on https://github.com/flutter/engine/pull/48090. It changes the `RenderView` to be dynamically sized based on its content if the `FlutterView` it is configured with allows it (i.e. the `FlutterView` has loose `FlutterView.physicalConstraints`). For that, it uses those `physicalConstraints` as input to the layout algorithm by passing them on to its child (after translating them to logical constraints via the device pixel ratio). The resulting `Size` that the `RenderView` would like to be is then communicated back to the engine by passing it to the `FlutterView.render` call. Tests will fail until https://github.com/flutter/engine/pull/48090 has rolled into the framework.
-
- 11 Oct, 2023 1 commit
-
-
Kenzie Davisson authored
We will expose this from a button in DevTools. https://github.com/flutter/devtools/issues/6166
-
- 10 Aug, 2023 1 commit
-
-
Ian Hickson authored
Fixes https://github.com/flutter/flutter/issues/132157
-
- 17 Jul, 2023 1 commit
-
-
Michael Goderbauer authored
This change enables Flutter to generate multiple Scenes to be rendered into separate FlutterViews from a single widget tree. Each Scene is described by a separate render tree, which are all associated with the single widget tree. This PR implements the framework-side mechanisms to describe the content to be rendered into multiple views. Separate engine-side changes are necessary to provide these views to the framework and to draw the framework-generated Scene into them. ## Summary of changes The details of this change are described in [flutter.dev/go/multiple-views](https://flutter.dev/go/multiple-views). Below is a high-level summary organized by layers. ### Rendering layer changes * The `RendererBinding` no longer owns a single `renderView`. In fact, it doesn't OWN any `RenderView`s at all anymore. Instead, it offers an API (`addRenderView`/`removeRenderView`) to add and remove `RenderView`s that then will be MANAGED by the binding. The `RenderView` itself is now owned by a higher-level abstraction (e.g. the `RawView` Element of the widgets layer, see below), who is also in charge of adding it to the binding. When added, the binding will interact with the `RenderView` to produce a frame (e.g. by calling `compositeFrame` on it) and to perform hit tests for incoming pointer events. Multiple `RenderView`s can be added to the binding (typically one per `FlutterView`) to produce multiple Scenes. * Instead of owning a single `pipelineOwner`, the `RendererBinding` now owns the root of the `PipelineOwner` tree (exposed as `rootPipelineOwner` on the binding). Each `PipelineOwner` in that tree (except for the root) typically manages its own render tree typically rooted in one of the `RenderView`s mentioned in the previous bullet. During frame production, the binding will instruct each `PipelineOwner` of that tree to flush layout, paint, semantics etc. A higher-level abstraction (e.g. the widgets layer, see below) is in charge of adding `PipelineOwner`s to this tree. * Backwards compatibility: The old `renderView` and `pipelineOwner` properties of the `RendererBinding` are retained, but marked as deprecated. Care has been taken to keep their original behavior for the deprecation period, i.e. if you just call `runApp`, the render tree bootstrapped by this call is rooted in the deprecated `RendererBinding.renderView` and managed by the deprecated `RendererBinding.pipelineOwner`. ### Widgets layer changes * The `WidgetsBinding` no longer attaches the widget tree to an existing render tree. Instead, it bootstraps a stand-alone widget tree that is not backed by a render tree. For this, `RenderObjectToWidgetAdapter` has been replaced by `RootWidget`. * Multiple render trees can be bootstrapped and attached to the widget tree with the help of the `View` widget, which internally is backed by a `RawView` widget. Configured with a `FlutterView` to render into, the `RawView` creates a new `PipelineOwner` and a new `RenderView` for the new render tree. It adds the new `RenderView` to the `RendererBinding` and its `PipelineOwner` to the pipeline owner tree. * The `View` widget can only appear in certain well-defined locations in the widget tree since it bootstraps a new render tree and does not insert a `RenderObject` into an ancestor. However, almost all Elements expect that their children insert `RenderObject`s, otherwise they will not function properly. To produce a good error message when the `View` widget is used in an illegal location, the `debugMustInsertRenderObjectIntoSlot` method has been added to Element, where a child can ask whether a given slot must insert a RenderObject into its ancestor or not. In practice, the `View` widget can be used as a child of the `RootWidget`, inside the `view` slot of the `ViewAnchor` (see below) and inside a `ViewCollection` (see below). In those locations, the `View` widget may be wrapped in other non-RenderObjectWidgets (e.g. InheritedWidgets). * The new `ViewAnchor` can be used to create a side-view inside a parent `View`. The `child` of the `ViewAnchor` widget renders into the parent `View` as usual, but the `view` slot can take on another `View` widget, which has access to all inherited widgets above the `ViewAnchor`. Metaphorically speaking, the view is anchored to the location of the `ViewAnchor` in the widget tree. * The new `ViewCollection` widget allows for multiple sibling views as it takes a list of `View`s as children. It can be used in all the places that accept a `View` widget. ## Google3 As of July 5, 2023 this change passed a TAP global presubmit (TGP) in google3: tap/OCL:544707016:BASE:545809771:1688597935864:e43dd651 ## Note to reviewers This change is big (sorry). I suggest focusing the initial review on the changes inside of `packages/flutter` first. The majority of the changes describe above are implemented in (listed in suggested review order): * `rendering/binding.dart` * `widgets/binding.dart` * `widgets/view.dart` * `widgets/framework.dart` All other changes included in the PR are basically the fallout of what's implemented in those files. Also note that a lot of the lines added in this PR are documentation and tests. I am also very happy to walk reviewers through the code in person or via video call, if that is helpful. I appreciate any feedback. ## Feedback to address before submitting ("TODO")
-
- 18 Apr, 2023 1 commit
-
-
Michael Goderbauer authored
These are currently unused and will not work in a multi-view environment where we will have multiple render trees. Work towards https://github.com/flutter/flutter/issues/121573.
-
- 04 Apr, 2023 1 commit
-
-
Michael Goderbauer authored
-
- 30 Mar, 2023 1 commit
-
-
Greg Price authored
Remove no-shuffle from framework tests, part 1: easy cases
-
- 28 Mar, 2023 1 commit
-
-
Loïc Sharma authored
[Focus] Add run key command to dump the focus tree
-
- 13 Feb, 2023 1 commit
-
-
Ian Hickson authored
-
- 21 Dec, 2022 1 commit
-
-
Michael Goderbauer authored
-
- 28 Oct, 2022 1 commit
-
-
Kenzie Davisson authored
-
- 12 Sep, 2022 1 commit
-
-
Kenzie Davisson authored
-
- 09 Sep, 2022 1 commit
-
-
Kenzie Davisson authored
* Create enum for scheduler service extension names so they can be accessed from tooling * fix two more strings
-
- 08 Sep, 2022 1 commit
-
-
Kenzie Davisson authored
-
- 07 Sep, 2022 2 commits
-
-
Kenzie Davisson authored
-
Kenzie Davisson authored
-
- 29 Jul, 2022 1 commit
-
-
Michael Goderbauer authored
-
- 07 Jul, 2022 1 commit
-
-
Daniel Chevalier authored
The pubRoot directory interface is being changed to promote adding and removing directories
-
- 15 Apr, 2022 1 commit
-
-
Kenzie Davisson authored
-
- 03 Mar, 2022 1 commit
-
-
Michael Goderbauer authored
-
- 14 Oct, 2021 1 commit
-
-
Kenzie (Schmoll) Davisson authored
-
- 08 Oct, 2021 1 commit
-
-
Kenzie (Schmoll) Davisson authored
-
- 27 Jul, 2021 1 commit
-
-
Greg Spencer authored
* Randomize tests, exclude tests that fail with randomization. * Disable some more tool tests
-
- 22 Jul, 2021 1 commit
-
-
Jonah Williams authored
-
- 01 Jul, 2021 1 commit
-
-
Greg Spencer authored
This reverts commit b5f9612c because it is taking about 40% longer to run the tests, which is causing timeouts.
-
- 29 Jun, 2021 1 commit
-
-
Greg Spencer authored
This turns on order shuffling for all tests that don't fail with it on, marking those tests that do fail with a tag so that they will be run without shuffling on. To determine which tests fail with it on, I ran all the tests 100 times with different random shuffle seeds, and then also ran it with the date seeds from today until the end of July, and tagged all of the test suites (files) that fail, with a seed that caused them to fail.
-
- 25 Jun, 2021 1 commit
-
-
Dan Field authored
-
- 21 May, 2021 1 commit
-
-
Ian Hickson authored
-
- 14 May, 2021 1 commit
-
-
Ian Hickson authored
-
- 13 May, 2021 1 commit
-
-
Ian Hickson authored
-
- 04 May, 2021 2 commits
-
-
Ian Hickson authored
- 26 Apr, 2021 1 commit
-
- 23 Apr, 2021 1 commit
-
-
Ian Hickson authored
* Migrate to ChannelBuffers.push * Move TestDefaultBinaryMessenger to its own file * Apply deprecations and fix usages
-
- 22 Apr, 2021 1 commit
-
-
Alexandre Ardhuin authored
-
- 16 Mar, 2021 2 commits
-
-
Ian Hickson authored
-
Zachary Anderson authored
This reverts commit 0cbe5975.
-
- 15 Mar, 2021 1 commit
-
-
Ian Hickson authored
-
- 16 Feb, 2021 1 commit
-
-
Jonah Williams authored
-
- 29 Jan, 2021 1 commit
-
-
Sam Rawlins authored
-