Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Conversation

@gmackall
Copy link
Member

@gmackall gmackall commented Jun 9, 2023

Fixes flutter/flutter#118761.

For some context: ImeSyncDeferringInsetsCallback extends WindowInsetsAnimation.Callback specifically to handle insets related to keyboard animations.

When a keyboard animation happens, we get a call to onPrepare with the animation, and then to onApplyWindowInsets with WindowInsets that represent the post animation state. For example, for hiding the keyboard, we would get WindowInsets with height of 0 for insets of type WindowInsets.Type.ime() (input method editor). We save these post-animation insets.

We then get calls to onProgress for each frame of the animation, and use the WindowInsets passed to onProgress to build new WindowInsets based on the saved post-animation insets, but with the keyboard insets overridden by the WindowInsets passed to onProgress.

Finally, we get a call to onEnd, where we apply the saved insets.

However, there can be multiple animation running at the same time. For example, dismissing the keyboard can result in an animation associated solely with the keyboard happening, as well as an animation associated only with the navigation bar happening. And they can start at slightly different times. This can result in the situation described in this comment: flutter/flutter#118761 (comment)

Re-setting needsSave to false ensures we don't ignore any updates to the final state, ensuring correct insets in onProgress and onEnd.

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the Flutter Style Guide and the C++, Objective-C, Java style guides.
  • I listed at least one issue that this PR fixes in the description above.
  • I added new tests to check the change I am making or feature I am adding, or Hixie said the PR is test-exempt. See testing the engine for instructions on writing and running engine tests.
  • I updated/added relevant documentation (doc comments with ///).
  • I signed the CLA.
  • All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@gmackall gmackall changed the title Capture additional final inset states in ImeSyncDeferringCallback Capture additional final inset states in ImeSyncDeferringInsetsCallback Jun 9, 2023
@gmackall
Copy link
Member Author

@jason-simmons I requested your review as you had made the most changes to this callback, but let me know if you're not the right person to review! I've also reached out on #hackers-engine to see if anyone there knows who best to review

@gmackall gmackall added the autosubmit Merge PR when tree becomes green via auto submit App label Jun 13, 2023
@auto-submit auto-submit bot merged commit 66a5761 into flutter:main Jun 13, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jun 13, 2023
auto-submit bot pushed a commit that referenced this pull request Jun 23, 2023
…hind capturing the latest final inset state (#43109)

Solely documentation change to explain the reasoning behind the change in #42700.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

autosubmit Merge PR when tree becomes green via auto submit App platform-android

Projects

None yet

Development

Successfully merging this pull request may close these issues.

False Window inset is set when dismissing keyboard preventing apps from using the full screen.

2 participants