fix: Re-run grid layout after item dimensions settle#578
Draft
MatiPl01 wants to merge 1 commit into
Draft
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
Sortable.Gridcould leave a freshly added or replaced row mispositioned after a non-reorderdatachange — an empty gap, or the new row invisible — until a drag forced a relayout (the reporter's "fixed the instant a drag starts").Root cause: the layout reaction that turns measured item heights into positions is correctly marked dirty when an item's height settles, but on native its execution depends on Reanimated's per-frame mapper loop being pumped. There are scheduling windows where the dirty layout mapper isn't run until something pumps the loop — and a gesture explicitly does (which is why a drag fixes it). This change forces a relayout once item dimensions settle (reusing the existing
layoutRequestIdmechanism) so positions don't wait for the loop to be pumped.Closes #565 (related: #286).
Note
Draft. This is a pragmatic compensation — the underlying trigger is Reanimated's native mapper scheduling, and the bug is intermittent and device/version dependent (it does not reproduce on a fast simulator). Please confirm it resolves the issue on a setup that reproduces before merging. A push-based layout (computing positions in the measurement flush instead of via the reactive mapper) would remove the dependency entirely but is a larger change.