This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Use dispatchKeyEvent, and handle keys sent to InputConnection.sendKeyEvent on Android #22340
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
This (mostly) re-lands #21163, which was reverted in #22321
This switches from using
onKeyDownto usingdispatchKeyEventon Android so that keys can be intercepted handled by the framework and not continue to be dispatched to other controls.It also now intercepts key events sent to
InputConnection.sendKeyEvent, as some IMEs do (e.g. the Hacker's Keyboard), and sends them to Flutter.This fixes the problem where (for example) pressing TAB on a hardware keyboard sends the tab to both the text field and to the focus traversal system.
Note that we still can't intercept all keystrokes given to a soft keyboard, only those which the soft keyboard decides to send to
InputConnection.sendKeyEvent, and system keys (like the back button) are only received if the IME doesn't eat them.Related Issues
Tests
Breaking Change