interceptorInput static method
dynamic
interceptorInput()
Implementation
static interceptorInput() {
if (isInterceptor) return;
isInterceptor = true;
ServicesBinding.instance!.defaultBinaryMessenger
.setMockMessageHandler("flutter/textinput", (ByteData? data) async {
var methodCall = _codec.decodeMethodCall(data);
switch (methodCall.method) {
case 'TextInput.show':
if (_currentKeyboard != null) {
if (clearTask != null) {
clearTask!.cancel();
clearTask = null;
}
openKeyboard();
return _codec.encodeSuccessEnvelope(null);
} else {
return await _sendPlatformMessage("flutter/textinput", data);
}
break;
case 'TextInput.hide':
if (_currentKeyboard != null) {
if (clearTask == null) {
clearTask = new Timer(Duration(milliseconds: 16),
() => hideKeyboard(animation: true));
}
return _codec.encodeSuccessEnvelope(null);
} else {
return await _sendPlatformMessage("flutter/textinput", data);
}
break;
case 'TextInput.setEditingState':
var editingState = TextEditingValue.fromJSON(methodCall.arguments);
if (editingState != null && _keyboardController != null) {
_keyboardController!.value = editingState;
return _codec.encodeSuccessEnvelope(null);
}
break;
case 'TextInput.clearClient':
if (clearTask == null) {
clearTask = new Timer(Duration(milliseconds: 16),
() => hideKeyboard(animation: true));
}
clearKeyboard();
break;
case 'TextInput.setClient':
var setInputType = methodCall.arguments[1]['inputType'];
InputClient? client;
_keyboards.forEach((inputType, keyboardConfig) {
if (inputType.name == setInputType['name']) {
client = InputClient.fromJSON(methodCall.arguments);
_keyboardParam =
(client!.configuration!.inputType as CKTextInputType).params;
clearKeyboard();
_currentKeyboard = keyboardConfig;
_keyboardController = KeyboardController(client: client)
..addListener(() {
var callbackMethodCall = MethodCall(
"TextInputClient.updateEditingState", [
_keyboardController!.client!.connectionId,
_keyboardController!.value.toJSON()
]);
ServicesBinding.instance!.defaultBinaryMessenger
.handlePlatformMessage(
"flutter/textinput",
_codec.encodeMethodCall(callbackMethodCall),
(data) {});
});
if (_pageKey != null) {
_pageKey!.currentState?.update();
}
}
});
if (client != null) {
await _sendPlatformMessage("flutter/textinput",
_codec.encodeMethodCall(MethodCall('TextInput.hide')));
return _codec.encodeSuccessEnvelope(null);
} else {
if (clearTask == null) {
hideKeyboard(animation: false);
}
clearKeyboard();
}
break;
}
ByteData response = await _sendPlatformMessage("flutter/textinput", data);
return response;
});
}