mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Don't hang to a platform view's input connection after it's disposed (flutter/engine#9423)
Addresses the crash reported in https://github.com/flutter/flutter/issues/19718#issuecomment-504174596
This commit is contained in:
parent
ac90c31ae4
commit
110c63afaf
@ -237,6 +237,21 @@ public class TextInputPlugin {
|
||||
return lastInputConnection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears a platform view text input client if it is the current input target.
|
||||
*
|
||||
* This is called when a platform view is disposed to make sure we're not hanging to a stale input
|
||||
* connection.
|
||||
*/
|
||||
public void clearPlatformViewClient(int platformViewId) {
|
||||
if (inputTarget.type == InputTarget.Type.PLATFORM_VIEW && inputTarget.id == platformViewId) {
|
||||
inputTarget = new InputTarget(InputTarget.Type.NO_TARGET, 0);
|
||||
hideTextInput(mView);
|
||||
mImm.restartInput(mView);
|
||||
mRestartInputPending = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void showTextInput(View view) {
|
||||
view.requestFocus();
|
||||
mImm.showSoftInput(view, 0);
|
||||
|
||||
@ -135,8 +135,11 @@ public class PlatformViewsController implements PlatformViewsAccessibilityDelega
|
||||
+ viewId);
|
||||
}
|
||||
|
||||
contextToPlatformView.remove(vdController.getView().getContext());
|
||||
if (textInputPlugin != null) {
|
||||
textInputPlugin.clearPlatformViewClient(viewId);
|
||||
}
|
||||
|
||||
contextToPlatformView.remove(vdController.getView().getContext());
|
||||
vdController.dispose();
|
||||
vdControllers.remove(viewId);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user