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

Commit 4d19e10

Browse files
committed
[web] Migrate Flutter Web DOM usage to JS static interop - 29.
1 parent d4042f3 commit 4d19e10

File tree

4 files changed

+153
-89
lines changed

4 files changed

+153
-89
lines changed

lib/web_ui/lib/src/engine/dom.dart

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ extension DomWindowExtension on DomWindow {
4040
external DomURL get URL;
4141
external bool dispatchEvent(DomEvent event);
4242
external DomMediaQueryList matchMedia(String? query);
43+
external DomCSSStyleDeclaration getComputedStyle(DomElement elt);
4344
}
4445

4546
@JS()
@@ -186,6 +187,7 @@ extension DomNodeExtension on DomNode {
186187
set text(String? value) =>
187188
js_util.setProperty<String?>(this, 'textContent', value);
188189
external DomNode cloneNode(bool? deep);
190+
external bool contains(DomNode? other);
189191
}
190192

191193
@JS()
@@ -898,6 +900,63 @@ DomPath2D createDomPath2D([Object? path]) =>
898900
domCallConstructorString('Path2D', <Object>[if (path != null) path])!
899901
as DomPath2D;
900902

903+
@JS()
904+
@staticInterop
905+
class DomMouseEvent extends DomUIEvent {}
906+
907+
extension DomMouseEventExtension on DomMouseEvent {
908+
external num get clientX;
909+
external num get clientY;
910+
external int get button;
911+
external int? get buttons;
912+
external bool getModifierState(String keyArg);
913+
}
914+
915+
@JS()
916+
@staticInterop
917+
class DomPointerEvent extends DomMouseEvent {}
918+
919+
extension DomPointerEventExtension on DomPointerEvent {
920+
external int? get pointerId;
921+
external String? get pointerType;
922+
external num? get pressure;
923+
external int? get tiltX;
924+
external int? get tiltY;
925+
List<DomPointerEvent> getCoalescedEvents() =>
926+
js_util.callMethod<List<Object?>>(
927+
this, 'getCoalescedEvents', <Object>[]).cast<DomPointerEvent>();
928+
}
929+
930+
@JS()
931+
@staticInterop
932+
class DomWheelEvent extends DomMouseEvent {}
933+
934+
extension DomWheelEventExtension on DomWheelEvent {
935+
external num get deltaX;
936+
external num get deltaY;
937+
external int get deltaMode;
938+
}
939+
940+
@JS()
941+
@staticInterop
942+
class DomTouchEvent extends DomUIEvent {}
943+
944+
extension DomTouchEventExtension on DomTouchEvent {
945+
List<DomTouch>? get changedTouches => js_util
946+
.getProperty<List<Object?>?>(this, 'changedTouches')
947+
?.cast<DomTouch>();
948+
}
949+
950+
@JS()
951+
@staticInterop
952+
class DomTouch {}
953+
954+
extension DomTouchExtension on DomTouch {
955+
external int? get identifier;
956+
external num? get clientX;
957+
external num? get clientY;
958+
}
959+
901960
Object? domGetConstructor(String constructorName) =>
902961
js_util.getProperty(domWindow, constructorName);
903962

lib/web_ui/lib/src/engine/embedder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ class FlutterViewEmbedder {
336336
_sceneHostElement!.style.opacity = '0.3';
337337
}
338338

339-
PointerBinding.initInstance(glassPaneElement as html.Element);
339+
PointerBinding.initInstance(glassPaneElement);
340340
KeyboardBinding.initInstance(glassPaneElement);
341341

342342
if (html.window.visualViewport == null && isWebKit) {

0 commit comments

Comments
 (0)