diff --git a/integration_tests/specs/dom/elements/input.ts b/integration_tests/specs/dom/elements/input.ts index a71ebc10f0..214685d5fd 100644 --- a/integration_tests/specs/dom/elements/input.ts +++ b/integration_tests/specs/dom/elements/input.ts @@ -364,4 +364,15 @@ describe('Tags input', () => { }); }); }); + + it('support work with click', (done) => { + const input = document.createElement('input'); + input.setAttribute('value', 'Input 1'); + document.body.appendChild(input); + input.addEventListener('click', function handler() { + done(); + }); + + simulateClick(10, 10); + }); }); diff --git a/kraken/lib/src/dom/elements/input.dart b/kraken/lib/src/dom/elements/input.dart index cd1688c376..dd84d587c7 100644 --- a/kraken/lib/src/dom/elements/input.dart +++ b/kraken/lib/src/dom/elements/input.dart @@ -8,6 +8,7 @@ import 'dart:collection'; import 'dart:ui'; import 'dart:ffi'; import 'dart:math' as math; +import 'package:flutter/gestures.dart'; import 'package:kraken/bridge.dart'; import 'package:flutter/animation.dart'; import 'package:flutter/foundation.dart'; @@ -304,12 +305,29 @@ class InputElement extends Element implements TextInputClient, TickerProvider { void dispatchEvent(Event event) { super.dispatchEvent(event); if (event.type == EVENT_TOUCH_START) { - InputElement.setFocus(this); + TouchEvent e = (event as TouchEvent); + if (e.touches.length == 1) { + InputElement.setFocus(this); + + Touch touch = e.touches[0]; + final TapDownDetails details = TapDownDetails( + globalPosition: Offset(touch.screenX, touch.screenY), + localPosition: Offset(touch.clientX, touch.clientY), + kind: PointerDeviceKind.touch, + ); + + _renderEditable!.handleTapDown(details); + } + // @TODO: selection. } else if (event.type == EVENT_TOUCH_MOVE) { // @TODO: selection. } else if (event.type == EVENT_TOUCH_END) { // @TODO: selection. + } else if (event.type == EVENT_CLICK) { + _renderEditable!.handleTap(); + } else if (event.type == EVENT_LONG_PRESS) { + _renderEditable!.handleLongPress(); } } @@ -411,6 +429,7 @@ class InputElement extends Element implements TextInputClient, TickerProvider { devicePixelRatio: window.devicePixelRatio, startHandleLayerLink: LayerLink(), endHandleLayerLink: LayerLink(), + ignorePointer: true, ); return _renderEditable!; }