diff --git a/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md b/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md index f8b01ae32a54..b9e968992d42 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md +++ b/packages/pointer_interceptor/pointer_interceptor_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.1 +* Migrates to `package:web`. +* Updates minimum supported SDK version to Flutter 3.16.0/Dart 3.2.0 + ## 0.10.0 * Moves web implementation to its own package. 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 22a2528f7d15..3db0487a4349 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,12 @@ // 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 +29,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 +41,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 +53,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 +63,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 +76,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 +89,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 +102,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 +120,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 +130,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 +141,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 e3f7b95066e7..6c0d14dc557a 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: 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 33c705fc3f30..18209d08a7b2 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,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 html.Element htmlElement = html.DivElement() - ..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)'; } diff --git a/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml b/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml index cebf7f9daabd..67dcf2585cba 100644 --- a/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml +++ b/packages/pointer_interceptor/pointer_interceptor_web/pubspec.yaml @@ -2,11 +2,11 @@ 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' - flutter: '>=3.13.0' + sdk: ^3.2.0 + flutter: '>=3.16.0' flutter: plugin: @@ -23,6 +23,7 @@ dependencies: sdk: flutter plugin_platform_interface: ^2.1.6 pointer_interceptor_platform_interface: ^0.10.0 + web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: