This repository was archived by the owner on Feb 25, 2025. It is now read-only.
[web][ck] Don't remove (then add) embedded views.#32948
Merged
fluttergithubbot merged 1 commit intoflutter:mainfrom Apr 27, 2022
Merged
[web][ck] Don't remove (then add) embedded views.#32948fluttergithubbot merged 1 commit intoflutter:mainfrom
fluttergithubbot merged 1 commit intoflutter:mainfrom
Conversation
When computing the diff of embedded views between a frame and the next (diffViewList), remove all views from viewsToRemove that are also in viewsToAdd. The framework needs a frame to re-render a view after it's been removed, and the browser is able to understand that we want to "move" a view, just by adding it elsewhere. Added some extra unit tests for the new behavior.
ditman
commented
Apr 27, 2022
| } | ||
| } | ||
|
|
||
| // Remove all ids from viewsToRemove that also exist in viewsToAdd. |
Member
Author
There was a problem hiding this comment.
Not entirely sure how to trigger/test this case, but looking at how the code accesses the viewClipChain, this branch of the code seems also vulnerable to the same error :/
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/flutter
that referenced
this pull request
Apr 27, 2022
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When computing the diff of embedded views between a frame and the next (
diffViewList), prevent viewIds from being returned both in theviewsToRemoveandviewsToAddof the diff (prefer them onviewsToAdd).If we let the diff remove views that are going to be added immediately afterwards, they get disposed of and then they cause a null access error when the engine attempts to add them a few lines below (the framework would need an extra frame to re-inject the missing view after it's been removed).
The browser is able to understand that we want to "move" an html element just by adding it elsewhere; so the solution is to ensure that
viewsToRemoveandviewsToAdddo not share view ids. (or: remove all viewIds fromviewsToRemovethat are going to be added byviewsToAdd).Tests
Issue
CanvaskitthrowsThe following TypeErrorImpl was thrown during a scheduler callback: Unexpected null value.flutter#94945Pre-launch Checklist
writing and running engine tests.
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.