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
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.