From fd9041cf245c06cc3cd61f1f14f74836366e368e Mon Sep 17 00:00:00 2001 From: balvinderz Date: Thu, 14 Dec 2023 13:06:49 +0530 Subject: [PATCH 1/5] migrate pointer interceptor to package:web? --- .../pointer_interceptor_web/CHANGELOG.md | 3 +++ .../lib/pointer_interceptor_web.dart | 6 ++---- .../pointer_interceptor_web/pubspec.yaml | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md b/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md index f8b01ae32a5..8e57f9feaed 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md +++ b/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md @@ -1,3 +1,6 @@ +## 0.10.1 +* Migrates to `package:web`. + ## 0.10.0 * Moves web implementation to its own package. diff --git a/packages/pointer_interceptor/pointer_interceptor_web/lib/pointer_interceptor_web.dart b/packages/pointer_interceptor/pointer_interceptor_web/lib/pointer_interceptor_web.dart index 33c705fc3f3..90c342587fa 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/lib/pointer_interceptor_web.dart +++ b/packages/pointer_interceptor/pointer_interceptor_web/lib/pointer_interceptor_web.dart @@ -2,14 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// ignore: avoid_web_libraries_in_flutter -import 'dart:html' as html; import 'dart:ui_web' as ui_web; import 'package:flutter/widgets.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; - import 'package:pointer_interceptor_platform_interface/pointer_interceptor_platform_interface.dart'; +import 'package:web/web.dart' as web; const String _viewType = '__webPointerInterceptorViewType__'; const String _debug = 'debug__'; @@ -23,7 +21,7 @@ String _getViewType({bool debug = false}) { void _registerFactory({bool debug = false}) { final String viewType = _getViewType(debug: debug); ui_web.platformViewRegistry.registerViewFactory(viewType, (int viewId) { - final html.Element htmlElement = html.DivElement() + final web.HTMLDivElement htmlElement = (web.document.createElement('div') as web.HTMLDivElement) ..style.width = '100%' ..style.height = '100%'; if (debug) { diff --git a/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml b/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml index cebf7f9daab..9dc6cde8a5d 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml +++ b/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml @@ -2,7 +2,7 @@ name: pointer_interceptor_web description: Web implementation of the pointer_interceptor plugin. repository: https://github.com/flutter/packages/tree/main/packages/pointer_interceptor/pointer_interceptor_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3Apointer_interceptor -version: 0.10.0 +version: 0.10.1 environment: sdk: '>=3.1.0 <4.0.0' @@ -23,6 +23,7 @@ dependencies: sdk: flutter plugin_platform_interface: ^2.1.6 pointer_interceptor_platform_interface: ^0.10.0 + web: ^0.3.0 dev_dependencies: flutter_test: From a17cdbb1ee3c1eb0210478367092ba660da05139 Mon Sep 17 00:00:00 2001 From: balvinderz Date: Thu, 14 Dec 2023 13:35:35 +0530 Subject: [PATCH 2/5] update flutter version --- .../pointer_interceptor_web/CHANGELOG.md | 1 + .../pointer_interceptor_web/pubspec.yaml | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md b/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md index 8e57f9feaed..b9e968992d4 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md +++ b/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md @@ -1,5 +1,6 @@ ## 0.10.1 * Migrates to `package:web`. +* Updates minimum supported SDK version to Flutter 3.16.0/Dart 3.2.0 ## 0.10.0 diff --git a/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml b/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml index 9dc6cde8a5d..67dcf2585cb 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml +++ b/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.10.1 environment: - sdk: '>=3.1.0 <4.0.0' - flutter: '>=3.13.0' + sdk: ^3.2.0 + flutter: '>=3.16.0' flutter: plugin: @@ -23,7 +23,7 @@ dependencies: sdk: flutter plugin_platform_interface: ^2.1.6 pointer_interceptor_platform_interface: ^0.10.0 - web: ^0.3.0 + web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: From 9822b10ce018f6322ee53854174751d3226441d7 Mon Sep 17 00:00:00 2001 From: balvinderz Date: Thu, 14 Dec 2023 18:32:10 +0530 Subject: [PATCH 3/5] format --- .../lib/pointer_interceptor_web.dart | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/pointer_interceptor/pointer_interceptor_web/lib/pointer_interceptor_web.dart b/packages/pointer_interceptor/pointer_interceptor_web/lib/pointer_interceptor_web.dart index 90c342587fa..18209d08a7b 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/lib/pointer_interceptor_web.dart +++ b/packages/pointer_interceptor/pointer_interceptor_web/lib/pointer_interceptor_web.dart @@ -21,9 +21,10 @@ String _getViewType({bool debug = false}) { void _registerFactory({bool debug = false}) { final String viewType = _getViewType(debug: debug); ui_web.platformViewRegistry.registerViewFactory(viewType, (int viewId) { - final web.HTMLDivElement htmlElement = (web.document.createElement('div') as web.HTMLDivElement) - ..style.width = '100%' - ..style.height = '100%'; + final web.HTMLDivElement htmlElement = + (web.document.createElement('div') as web.HTMLDivElement) + ..style.width = '100%' + ..style.height = '100%'; if (debug) { htmlElement.style.backgroundColor = 'rgba(255, 0, 0, .5)'; } From 1b9cf312ab266cb87898621f03f3b6be0d1e4c6f Mon Sep 17 00:00:00 2001 From: balvinderz Date: Thu, 14 Dec 2023 22:50:32 +0530 Subject: [PATCH 4/5] update test --- .../example/integration_test/widget_test.dart | 53 ++++++------------- .../example/pubspec.yaml | 6 ++- 2 files changed, 19 insertions(+), 40 deletions(-) diff --git a/packages/pointer_interceptor/pointer_interceptor_web/example/integration_test/widget_test.dart b/packages/pointer_interceptor/pointer_interceptor_web/example/integration_test/widget_test.dart index 22a2528f7d1..0c18e8b64e1 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/example/integration_test/widget_test.dart +++ b/packages/pointer_interceptor/pointer_interceptor_web/example/integration_test/widget_test.dart @@ -4,14 +4,13 @@ // ignore_for_file: avoid_print -import 'dart:html' as html; // Imports the Flutter Driver API. import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; - import 'package:pointer_interceptor_web_example/main.dart' as app; +import 'package:web/web.dart' as web; final Finder nonClickableButtonFinder = find.byKey(const Key('transparent-button')); @@ -31,7 +30,7 @@ void main() { app.main(); await tester.pumpAndSettle(); - final html.Element element = + final web.Element element = _getHtmlElementAtCenter(clickableButtonFinder, tester); expect(element.id, isNot('background-html-view')); @@ -43,7 +42,7 @@ void main() { app.main(); await tester.pumpAndSettle(); - final html.Element element = + final web.Element element = _getHtmlElementAtCenter(clickableWrappedButtonFinder, tester); expect(element.id, 'background-html-view'); @@ -55,7 +54,7 @@ void main() { app.main(); await tester.pumpAndSettle(); - final html.Element element = + final web.Element element = _getHtmlElementAtCenter(nonClickableButtonFinder, tester); expect(element.id, 'background-html-view'); @@ -65,7 +64,7 @@ void main() { app.main(); await tester.pumpAndSettle(); - final html.Element element = + final web.Element element = _getHtmlElementAt(tester.getTopLeft(backgroundFinder)); expect(element.id, 'background-html-view'); @@ -78,12 +77,7 @@ void main() { app.main(); await tester.pumpAndSettle(); - if (!_newSemanticsAvailable()) { - print('Skipping test: Needs flutter > 2.10'); - return; - } - - final html.Element element = + final web.Element element = _getHtmlElementAtCenter(clickableButtonFinder, tester); expect(element.tagName.toLowerCase(), 'flt-semantics'); @@ -96,12 +90,7 @@ void main() { app.main(); await tester.pumpAndSettle(); - if (!_newSemanticsAvailable()) { - print('Skipping test: Needs flutter > 2.10'); - return; - } - - final html.Element element = + final web.Element element = _getHtmlElementAtCenter(clickableWrappedButtonFinder, tester); expect(element.tagName.toLowerCase(), 'flt-semantics'); @@ -114,12 +103,7 @@ void main() { app.main(); await tester.pumpAndSettle(); - if (!_newSemanticsAvailable()) { - print('Skipping test: Needs flutter > 2.10'); - return; - } - - final html.Element element = + final web.Element element = _getHtmlElementAtCenter(nonClickableButtonFinder, tester); expect(element.tagName.toLowerCase(), 'flt-semantics'); @@ -137,7 +121,7 @@ void main() { app.main(); await tester.pumpAndSettle(); - final html.Element element = + final web.Element element = _getHtmlElementAt(tester.getTopLeft(backgroundFinder)); expect(element.id, 'background-html-view'); @@ -147,7 +131,7 @@ void main() { // Calls [_getHtmlElementAt] passing it the center of the widget identified by // the `finder`. -html.Element _getHtmlElementAtCenter(Finder finder, WidgetTester tester) { +web.Element _getHtmlElementAtCenter(Finder finder, WidgetTester tester) { final Offset point = tester.getCenter(finder); return _getHtmlElementAt(point); } @@ -158,22 +142,15 @@ html.Element _getHtmlElementAtCenter(Finder finder, WidgetTester tester) { // sensitive to the presence of shadow roots and browser quirks (not all // browsers agree on what it should return in all situations). Since this test // runs only in Chromium, it relies on Chromium's behavior. -html.Element _getHtmlElementAt(Offset point) { +web.Element _getHtmlElementAt(Offset point) { // Probe at the shadow so the browser reports semantics nodes in addition to // platform view elements. If probed from `html.document` the browser hides // the contents of as an implementation detail. - final html.ShadowRoot glassPaneShadow = - html.document.querySelector('flt-glass-pane')!.shadowRoot!; + final web.ShadowRoot glassPaneShadow = + web.document.querySelector('flt-glass-pane')!.shadowRoot!; return glassPaneShadow.elementFromPoint(point.dx.toInt(), point.dy.toInt())!; } -// TODO(dit): Remove this after flutter master (2.13) lands into stable. -// This detects that we can do new semantics assertions by looking at the 'id' -// attribute on flt-semantics elements (it is now set in 2.13 and up). -bool _newSemanticsAvailable() { - final html.ShadowRoot glassPaneShadow = - html.document.querySelector('flt-glass-pane')!.shadowRoot!; - final List elements = - glassPaneShadow.querySelectorAll('flt-semantics[id]'); - return elements.isNotEmpty; +extension ShadowRootExtension on web.ShadowRoot { + external web.Element? elementFromPoint(num x, num y); } diff --git a/packages/pointer_interceptor/pointer_interceptor_web/example/pubspec.yaml b/packages/pointer_interceptor/pointer_interceptor_web/example/pubspec.yaml index e3f7b95066e..6c0d14dc557 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/example/pubspec.yaml +++ b/packages/pointer_interceptor/pointer_interceptor_web/example/pubspec.yaml @@ -3,8 +3,8 @@ description: "Demonstrates how to use the pointer_interceptor_web plugin." publish_to: 'none' environment: - sdk: ">=3.1.0 <4.0.0" - flutter: ">=3.13.0" + sdk: ^3.2.0 + flutter: '>=3.16.0' dependencies: cupertino_icons: ^1.0.2 @@ -13,6 +13,8 @@ dependencies: pointer_interceptor_platform_interface: ^0.10.0 pointer_interceptor_web: path: ../../pointer_interceptor_web + web: '>=0.3.0 <0.5.0' + dev_dependencies: flutter_test: From 1aadf7f191a46b720b6073af9cbc11035f3c7c49 Mon Sep 17 00:00:00 2001 From: balvinderz Date: Thu, 14 Dec 2023 23:16:03 +0530 Subject: [PATCH 5/5] format --- .../example/integration_test/widget_test.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/pointer_interceptor/pointer_interceptor_web/example/integration_test/widget_test.dart b/packages/pointer_interceptor/pointer_interceptor_web/example/integration_test/widget_test.dart index 0c18e8b64e1..3db0487a434 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/example/integration_test/widget_test.dart +++ b/packages/pointer_interceptor/pointer_interceptor_web/example/integration_test/widget_test.dart @@ -4,7 +4,6 @@ // ignore_for_file: avoid_print - // Imports the Flutter Driver API. import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter_test/flutter_test.dart';