From adafc76bc29fe0284f2cfdecfc5cedc5f81295ea Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Tue, 12 Sep 2023 17:38:48 -0700 Subject: [PATCH 01/21] wip --- .../lib/shared_preferences_web.dart | 25 ++++++++++++------- .../shared_preferences_web/pubspec.yaml | 1 + 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart index 34c33ce82cf..0462bd26bc5 100644 --- a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart +++ b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart @@ -4,11 +4,11 @@ import 'dart:async'; import 'dart:convert' show json; -import 'dart:html' as html; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; import 'package:shared_preferences_platform_interface/types.dart'; +import 'package:web/web.dart' as html; /// The web implementation of [SharedPreferencesStorePlatform]. /// @@ -42,8 +42,11 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { // IMPORTANT: Do not use html.window.localStorage.clear() as that will // remove _all_ local data, not just the keys prefixed with // _prefix - _getFilteredKeys(filter.prefix, allowList: filter.allowList) - .forEach(html.window.localStorage.remove); + // ignore: prefer_foreach + for (final String item + in _getFilteredKeys(filter.prefix, allowList: filter.allowList)) { + html.window.localStorage.removeItem(item); + } return true; } @@ -69,29 +72,33 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { final Map allData = {}; for (final String key in _getFilteredKeys(filter.prefix, allowList: filter.allowList)) { - allData[key] = _decodeValue(html.window.localStorage[key]!); + allData[key] = _decodeValue(html.window.localStorage.getItem(key)!); } return allData; } @override Future remove(String key) async { - html.window.localStorage.remove(key); + html.window.localStorage.removeItem(key); return true; } @override Future setValue(String valueType, String key, Object? value) async { - html.window.localStorage[key] = _encodeValue(value); + html.window.localStorage.setItem(key, _encodeValue(value)); return true; } Iterable _getFilteredKeys( String prefix, { Set? allowList, - }) { - return html.window.localStorage.keys.where((String key) => - key.startsWith(prefix) && (allowList?.contains(key) ?? true)); + }) sync* { + for (int i = 0; i < html.window.localStorage.length; i++) { + final String key = html.window.localStorage.key(i)!; + if (key.startsWith(prefix) && (allowList?.contains(key) ?? true)) { + yield key; + } + } } String _encodeValue(Object? value) { diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index 522b25e641c..77b96e4c3e0 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -22,6 +22,7 @@ dependencies: flutter_web_plugins: sdk: flutter shared_preferences_platform_interface: ^2.3.0 + web: ^0.1.4-beta dev_dependencies: flutter_test: From 59c8103f7bf6b3a6fe79ff954076940e47cee675 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Mon, 18 Sep 2023 09:05:29 -0700 Subject: [PATCH 02/21] Attempt at URL launcher --- .../url_launcher_web_test.dart | 5 +- .../url_launcher_web_test.mocks.dart | 1331 +---------------- .../url_launcher_web/example/pubspec.yaml | 1 + .../url_launcher_web/lib/src/link.dart | 14 +- .../lib/url_launcher_web.dart | 5 +- .../url_launcher_web/pubspec.yaml | 1 + 6 files changed, 18 insertions(+), 1339 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart index f2dac2bb143..2c9c898aabc 100644 --- a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart +++ b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart @@ -2,13 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:html' as html; - import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:url_launcher_web/url_launcher_web.dart'; +import 'package:web/web.dart' as html; import 'url_launcher_web_test.mocks.dart'; @@ -28,7 +27,7 @@ void main() { when(mockWindow.navigator).thenReturn(mockNavigator); // Simulate that window.open does something. - when(mockWindow.open(any, any)).thenReturn(MockWindow()); + when(mockWindow.open('any', 'any')).thenReturn(MockWindow()); when(mockNavigator.userAgent).thenReturn( 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'); diff --git a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart index 004ac135ae4..5f4467a338a 100644 --- a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart +++ b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart @@ -1,13 +1,12 @@ -// Mocks generated by Mockito 5.4.0 from annotations +// Mocks generated by Mockito 5.4.1 from annotations // in regular_integration_tests/integration_test/url_launcher_web_test.dart. // Do not manually edit this file. -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i3; -import 'dart:html' as _i2; -import 'dart:math' as _i4; +// @dart=2.19 +// ignore_for_file: no_leading_underscores_for_library_prefixes import 'package:mockito/mockito.dart' as _i1; +import 'package:web/src/dom/html.dart' as _i2; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -20,169 +19,6 @@ import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeDocument_0 extends _i1.SmartFake implements _i2.Document { - _FakeDocument_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeLocation_1 extends _i1.SmartFake implements _i2.Location { - _FakeLocation_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeConsole_2 extends _i1.SmartFake implements _i2.Console { - _FakeConsole_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeHistory_3 extends _i1.SmartFake implements _i2.History { - _FakeHistory_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeStorage_4 extends _i1.SmartFake implements _i2.Storage { - _FakeStorage_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeNavigator_5 extends _i1.SmartFake implements _i2.Navigator { - _FakeNavigator_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakePerformance_6 extends _i1.SmartFake implements _i2.Performance { - _FakePerformance_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeEvents_7 extends _i1.SmartFake implements _i2.Events { - _FakeEvents_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeWindowBase_8 extends _i1.SmartFake implements _i2.WindowBase { - _FakeWindowBase_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeFileSystem_9 extends _i1.SmartFake implements _i2.FileSystem { - _FakeFileSystem_9( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeStylePropertyMapReadonly_10 extends _i1.SmartFake - implements _i2.StylePropertyMapReadonly { - _FakeStylePropertyMapReadonly_10( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeMediaQueryList_11 extends _i1.SmartFake - implements _i2.MediaQueryList { - _FakeMediaQueryList_11( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeEntry_12 extends _i1.SmartFake implements _i2.Entry { - _FakeEntry_12( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeGeolocation_13 extends _i1.SmartFake implements _i2.Geolocation { - _FakeGeolocation_13( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeMediaStream_14 extends _i1.SmartFake implements _i2.MediaStream { - _FakeMediaStream_14( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeRelatedApplication_15 extends _i1.SmartFake - implements _i2.RelatedApplication { - _FakeRelatedApplication_15( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - /// A class which mocks [Window]. /// /// See the documentation for Mockito's code generation for more information. @@ -190,968 +26,6 @@ class MockWindow extends _i1.Mock implements _i2.Window { MockWindow() { _i1.throwOnMissingStub(this); } - - @override - _i3.Future get animationFrame => (super.noSuchMethod( - Invocation.getter(#animationFrame), - returnValue: _i3.Future.value(0), - ) as _i3.Future); - @override - _i2.Document get document => (super.noSuchMethod( - Invocation.getter(#document), - returnValue: _FakeDocument_0( - this, - Invocation.getter(#document), - ), - ) as _i2.Document); - @override - _i2.Location get location => (super.noSuchMethod( - Invocation.getter(#location), - returnValue: _FakeLocation_1( - this, - Invocation.getter(#location), - ), - ) as _i2.Location); - @override - set location(_i2.LocationBase? value) => super.noSuchMethod( - Invocation.setter( - #location, - value, - ), - returnValueForMissingStub: null, - ); - @override - _i2.Console get console => (super.noSuchMethod( - Invocation.getter(#console), - returnValue: _FakeConsole_2( - this, - Invocation.getter(#console), - ), - ) as _i2.Console); - @override - set defaultStatus(String? value) => super.noSuchMethod( - Invocation.setter( - #defaultStatus, - value, - ), - returnValueForMissingStub: null, - ); - @override - set defaultstatus(String? value) => super.noSuchMethod( - Invocation.setter( - #defaultstatus, - value, - ), - returnValueForMissingStub: null, - ); - @override - num get devicePixelRatio => (super.noSuchMethod( - Invocation.getter(#devicePixelRatio), - returnValue: 0, - ) as num); - @override - _i2.History get history => (super.noSuchMethod( - Invocation.getter(#history), - returnValue: _FakeHistory_3( - this, - Invocation.getter(#history), - ), - ) as _i2.History); - @override - _i2.Storage get localStorage => (super.noSuchMethod( - Invocation.getter(#localStorage), - returnValue: _FakeStorage_4( - this, - Invocation.getter(#localStorage), - ), - ) as _i2.Storage); - @override - set name(String? value) => super.noSuchMethod( - Invocation.setter( - #name, - value, - ), - returnValueForMissingStub: null, - ); - @override - _i2.Navigator get navigator => (super.noSuchMethod( - Invocation.getter(#navigator), - returnValue: _FakeNavigator_5( - this, - Invocation.getter(#navigator), - ), - ) as _i2.Navigator); - @override - set opener(_i2.WindowBase? value) => super.noSuchMethod( - Invocation.setter( - #opener, - value, - ), - returnValueForMissingStub: null, - ); - @override - int get outerHeight => (super.noSuchMethod( - Invocation.getter(#outerHeight), - returnValue: 0, - ) as int); - @override - int get outerWidth => (super.noSuchMethod( - Invocation.getter(#outerWidth), - returnValue: 0, - ) as int); - @override - _i2.Performance get performance => (super.noSuchMethod( - Invocation.getter(#performance), - returnValue: _FakePerformance_6( - this, - Invocation.getter(#performance), - ), - ) as _i2.Performance); - @override - _i2.Storage get sessionStorage => (super.noSuchMethod( - Invocation.getter(#sessionStorage), - returnValue: _FakeStorage_4( - this, - Invocation.getter(#sessionStorage), - ), - ) as _i2.Storage); - @override - set status(String? value) => super.noSuchMethod( - Invocation.setter( - #status, - value, - ), - returnValueForMissingStub: null, - ); - @override - _i3.Stream<_i2.Event> get onContentLoaded => (super.noSuchMethod( - Invocation.getter(#onContentLoaded), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onAbort => (super.noSuchMethod( - Invocation.getter(#onAbort), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onBlur => (super.noSuchMethod( - Invocation.getter(#onBlur), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onCanPlay => (super.noSuchMethod( - Invocation.getter(#onCanPlay), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onCanPlayThrough => (super.noSuchMethod( - Invocation.getter(#onCanPlayThrough), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onChange => (super.noSuchMethod( - Invocation.getter(#onChange), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.MouseEvent> get onClick => (super.noSuchMethod( - Invocation.getter(#onClick), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onContextMenu => (super.noSuchMethod( - Invocation.getter(#onContextMenu), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.Event> get onDoubleClick => (super.noSuchMethod( - Invocation.getter(#onDoubleClick), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.DeviceMotionEvent> get onDeviceMotion => (super.noSuchMethod( - Invocation.getter(#onDeviceMotion), - returnValue: _i3.Stream<_i2.DeviceMotionEvent>.empty(), - ) as _i3.Stream<_i2.DeviceMotionEvent>); - @override - _i3.Stream<_i2.DeviceOrientationEvent> get onDeviceOrientation => - (super.noSuchMethod( - Invocation.getter(#onDeviceOrientation), - returnValue: _i3.Stream<_i2.DeviceOrientationEvent>.empty(), - ) as _i3.Stream<_i2.DeviceOrientationEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDrag => (super.noSuchMethod( - Invocation.getter(#onDrag), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragEnd => (super.noSuchMethod( - Invocation.getter(#onDragEnd), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragEnter => (super.noSuchMethod( - Invocation.getter(#onDragEnter), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragLeave => (super.noSuchMethod( - Invocation.getter(#onDragLeave), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragOver => (super.noSuchMethod( - Invocation.getter(#onDragOver), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragStart => (super.noSuchMethod( - Invocation.getter(#onDragStart), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDrop => (super.noSuchMethod( - Invocation.getter(#onDrop), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.Event> get onDurationChange => (super.noSuchMethod( - Invocation.getter(#onDurationChange), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onEmptied => (super.noSuchMethod( - Invocation.getter(#onEmptied), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onEnded => (super.noSuchMethod( - Invocation.getter(#onEnded), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onError => (super.noSuchMethod( - Invocation.getter(#onError), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onFocus => (super.noSuchMethod( - Invocation.getter(#onFocus), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onHashChange => (super.noSuchMethod( - Invocation.getter(#onHashChange), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onInput => (super.noSuchMethod( - Invocation.getter(#onInput), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onInvalid => (super.noSuchMethod( - Invocation.getter(#onInvalid), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.KeyboardEvent> get onKeyDown => (super.noSuchMethod( - Invocation.getter(#onKeyDown), - returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), - ) as _i3.Stream<_i2.KeyboardEvent>); - @override - _i3.Stream<_i2.KeyboardEvent> get onKeyPress => (super.noSuchMethod( - Invocation.getter(#onKeyPress), - returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), - ) as _i3.Stream<_i2.KeyboardEvent>); - @override - _i3.Stream<_i2.KeyboardEvent> get onKeyUp => (super.noSuchMethod( - Invocation.getter(#onKeyUp), - returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), - ) as _i3.Stream<_i2.KeyboardEvent>); - @override - _i3.Stream<_i2.Event> get onLoad => (super.noSuchMethod( - Invocation.getter(#onLoad), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onLoadedData => (super.noSuchMethod( - Invocation.getter(#onLoadedData), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onLoadedMetadata => (super.noSuchMethod( - Invocation.getter(#onLoadedMetadata), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onLoadStart => (super.noSuchMethod( - Invocation.getter(#onLoadStart), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.MessageEvent> get onMessage => (super.noSuchMethod( - Invocation.getter(#onMessage), - returnValue: _i3.Stream<_i2.MessageEvent>.empty(), - ) as _i3.Stream<_i2.MessageEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseDown => (super.noSuchMethod( - Invocation.getter(#onMouseDown), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseEnter => (super.noSuchMethod( - Invocation.getter(#onMouseEnter), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseLeave => (super.noSuchMethod( - Invocation.getter(#onMouseLeave), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseMove => (super.noSuchMethod( - Invocation.getter(#onMouseMove), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseOut => (super.noSuchMethod( - Invocation.getter(#onMouseOut), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseOver => (super.noSuchMethod( - Invocation.getter(#onMouseOver), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseUp => (super.noSuchMethod( - Invocation.getter(#onMouseUp), - returnValue: _i3.Stream<_i2.MouseEvent>.empty(), - ) as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.WheelEvent> get onMouseWheel => (super.noSuchMethod( - Invocation.getter(#onMouseWheel), - returnValue: _i3.Stream<_i2.WheelEvent>.empty(), - ) as _i3.Stream<_i2.WheelEvent>); - @override - _i3.Stream<_i2.Event> get onOffline => (super.noSuchMethod( - Invocation.getter(#onOffline), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onOnline => (super.noSuchMethod( - Invocation.getter(#onOnline), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPageHide => (super.noSuchMethod( - Invocation.getter(#onPageHide), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPageShow => (super.noSuchMethod( - Invocation.getter(#onPageShow), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPause => (super.noSuchMethod( - Invocation.getter(#onPause), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPlay => (super.noSuchMethod( - Invocation.getter(#onPlay), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPlaying => (super.noSuchMethod( - Invocation.getter(#onPlaying), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.PopStateEvent> get onPopState => (super.noSuchMethod( - Invocation.getter(#onPopState), - returnValue: _i3.Stream<_i2.PopStateEvent>.empty(), - ) as _i3.Stream<_i2.PopStateEvent>); - @override - _i3.Stream<_i2.Event> get onProgress => (super.noSuchMethod( - Invocation.getter(#onProgress), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onRateChange => (super.noSuchMethod( - Invocation.getter(#onRateChange), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onReset => (super.noSuchMethod( - Invocation.getter(#onReset), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onResize => (super.noSuchMethod( - Invocation.getter(#onResize), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onScroll => (super.noSuchMethod( - Invocation.getter(#onScroll), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSearch => (super.noSuchMethod( - Invocation.getter(#onSearch), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSeeked => (super.noSuchMethod( - Invocation.getter(#onSeeked), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSeeking => (super.noSuchMethod( - Invocation.getter(#onSeeking), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSelect => (super.noSuchMethod( - Invocation.getter(#onSelect), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onStalled => (super.noSuchMethod( - Invocation.getter(#onStalled), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.StorageEvent> get onStorage => (super.noSuchMethod( - Invocation.getter(#onStorage), - returnValue: _i3.Stream<_i2.StorageEvent>.empty(), - ) as _i3.Stream<_i2.StorageEvent>); - @override - _i3.Stream<_i2.Event> get onSubmit => (super.noSuchMethod( - Invocation.getter(#onSubmit), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSuspend => (super.noSuchMethod( - Invocation.getter(#onSuspend), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onTimeUpdate => (super.noSuchMethod( - Invocation.getter(#onTimeUpdate), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.TouchEvent> get onTouchCancel => (super.noSuchMethod( - Invocation.getter(#onTouchCancel), - returnValue: _i3.Stream<_i2.TouchEvent>.empty(), - ) as _i3.Stream<_i2.TouchEvent>); - @override - _i3.Stream<_i2.TouchEvent> get onTouchEnd => (super.noSuchMethod( - Invocation.getter(#onTouchEnd), - returnValue: _i3.Stream<_i2.TouchEvent>.empty(), - ) as _i3.Stream<_i2.TouchEvent>); - @override - _i3.Stream<_i2.TouchEvent> get onTouchMove => (super.noSuchMethod( - Invocation.getter(#onTouchMove), - returnValue: _i3.Stream<_i2.TouchEvent>.empty(), - ) as _i3.Stream<_i2.TouchEvent>); - @override - _i3.Stream<_i2.TouchEvent> get onTouchStart => (super.noSuchMethod( - Invocation.getter(#onTouchStart), - returnValue: _i3.Stream<_i2.TouchEvent>.empty(), - ) as _i3.Stream<_i2.TouchEvent>); - @override - _i3.Stream<_i2.TransitionEvent> get onTransitionEnd => (super.noSuchMethod( - Invocation.getter(#onTransitionEnd), - returnValue: _i3.Stream<_i2.TransitionEvent>.empty(), - ) as _i3.Stream<_i2.TransitionEvent>); - @override - _i3.Stream<_i2.Event> get onUnload => (super.noSuchMethod( - Invocation.getter(#onUnload), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onVolumeChange => (super.noSuchMethod( - Invocation.getter(#onVolumeChange), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onWaiting => (super.noSuchMethod( - Invocation.getter(#onWaiting), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.AnimationEvent> get onAnimationEnd => (super.noSuchMethod( - Invocation.getter(#onAnimationEnd), - returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), - ) as _i3.Stream<_i2.AnimationEvent>); - @override - _i3.Stream<_i2.AnimationEvent> get onAnimationIteration => - (super.noSuchMethod( - Invocation.getter(#onAnimationIteration), - returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), - ) as _i3.Stream<_i2.AnimationEvent>); - @override - _i3.Stream<_i2.AnimationEvent> get onAnimationStart => (super.noSuchMethod( - Invocation.getter(#onAnimationStart), - returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), - ) as _i3.Stream<_i2.AnimationEvent>); - @override - _i3.Stream<_i2.Event> get onBeforeUnload => (super.noSuchMethod( - Invocation.getter(#onBeforeUnload), - returnValue: _i3.Stream<_i2.Event>.empty(), - ) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.WheelEvent> get onWheel => (super.noSuchMethod( - Invocation.getter(#onWheel), - returnValue: _i3.Stream<_i2.WheelEvent>.empty(), - ) as _i3.Stream<_i2.WheelEvent>); - @override - int get pageXOffset => (super.noSuchMethod( - Invocation.getter(#pageXOffset), - returnValue: 0, - ) as int); - @override - int get pageYOffset => (super.noSuchMethod( - Invocation.getter(#pageYOffset), - returnValue: 0, - ) as int); - @override - int get scrollX => (super.noSuchMethod( - Invocation.getter(#scrollX), - returnValue: 0, - ) as int); - @override - int get scrollY => (super.noSuchMethod( - Invocation.getter(#scrollY), - returnValue: 0, - ) as int); - @override - _i2.Events get on => (super.noSuchMethod( - Invocation.getter(#on), - returnValue: _FakeEvents_7( - this, - Invocation.getter(#on), - ), - ) as _i2.Events); - @override - _i2.WindowBase open( - String? url, - String? name, [ - String? options, - ]) => - (super.noSuchMethod( - Invocation.method( - #open, - [ - url, - name, - options, - ], - ), - returnValue: _FakeWindowBase_8( - this, - Invocation.method( - #open, - [ - url, - name, - options, - ], - ), - ), - ) as _i2.WindowBase); - @override - int requestAnimationFrame(_i2.FrameRequestCallback? callback) => - (super.noSuchMethod( - Invocation.method( - #requestAnimationFrame, - [callback], - ), - returnValue: 0, - ) as int); - @override - void cancelAnimationFrame(int? id) => super.noSuchMethod( - Invocation.method( - #cancelAnimationFrame, - [id], - ), - returnValueForMissingStub: null, - ); - @override - _i3.Future<_i2.FileSystem> requestFileSystem( - int? size, { - bool? persistent = false, - }) => - (super.noSuchMethod( - Invocation.method( - #requestFileSystem, - [size], - {#persistent: persistent}, - ), - returnValue: _i3.Future<_i2.FileSystem>.value(_FakeFileSystem_9( - this, - Invocation.method( - #requestFileSystem, - [size], - {#persistent: persistent}, - ), - )), - ) as _i3.Future<_i2.FileSystem>); - @override - void alert([String? message]) => super.noSuchMethod( - Invocation.method( - #alert, - [message], - ), - returnValueForMissingStub: null, - ); - @override - void cancelIdleCallback(int? handle) => super.noSuchMethod( - Invocation.method( - #cancelIdleCallback, - [handle], - ), - returnValueForMissingStub: null, - ); - @override - void close() => super.noSuchMethod( - Invocation.method( - #close, - [], - ), - returnValueForMissingStub: null, - ); - @override - bool confirm([String? message]) => (super.noSuchMethod( - Invocation.method( - #confirm, - [message], - ), - returnValue: false, - ) as bool); - @override - _i3.Future fetch( - dynamic input, [ - Map? init, - ]) => - (super.noSuchMethod( - Invocation.method( - #fetch, - [ - input, - init, - ], - ), - returnValue: _i3.Future.value(), - ) as _i3.Future); - @override - bool find( - String? string, - bool? caseSensitive, - bool? backwards, - bool? wrap, - bool? wholeWord, - bool? searchInFrames, - bool? showDialog, - ) => - (super.noSuchMethod( - Invocation.method( - #find, - [ - string, - caseSensitive, - backwards, - wrap, - wholeWord, - searchInFrames, - showDialog, - ], - ), - returnValue: false, - ) as bool); - @override - _i2.StylePropertyMapReadonly getComputedStyleMap( - _i2.Element? element, - String? pseudoElement, - ) => - (super.noSuchMethod( - Invocation.method( - #getComputedStyleMap, - [ - element, - pseudoElement, - ], - ), - returnValue: _FakeStylePropertyMapReadonly_10( - this, - Invocation.method( - #getComputedStyleMap, - [ - element, - pseudoElement, - ], - ), - ), - ) as _i2.StylePropertyMapReadonly); - @override - List<_i2.CssRule> getMatchedCssRules( - _i2.Element? element, - String? pseudoElement, - ) => - (super.noSuchMethod( - Invocation.method( - #getMatchedCssRules, - [ - element, - pseudoElement, - ], - ), - returnValue: <_i2.CssRule>[], - ) as List<_i2.CssRule>); - @override - _i2.MediaQueryList matchMedia(String? query) => (super.noSuchMethod( - Invocation.method( - #matchMedia, - [query], - ), - returnValue: _FakeMediaQueryList_11( - this, - Invocation.method( - #matchMedia, - [query], - ), - ), - ) as _i2.MediaQueryList); - @override - void moveBy( - int? x, - int? y, - ) => - super.noSuchMethod( - Invocation.method( - #moveBy, - [ - x, - y, - ], - ), - returnValueForMissingStub: null, - ); - @override - void postMessage( - dynamic message, - String? targetOrigin, [ - List? transfer, - ]) => - super.noSuchMethod( - Invocation.method( - #postMessage, - [ - message, - targetOrigin, - transfer, - ], - ), - returnValueForMissingStub: null, - ); - @override - void print() => super.noSuchMethod( - Invocation.method( - #print, - [], - ), - returnValueForMissingStub: null, - ); - @override - int requestIdleCallback( - _i2.IdleRequestCallback? callback, [ - Map? options, - ]) => - (super.noSuchMethod( - Invocation.method( - #requestIdleCallback, - [ - callback, - options, - ], - ), - returnValue: 0, - ) as int); - @override - void resizeBy( - int? x, - int? y, - ) => - super.noSuchMethod( - Invocation.method( - #resizeBy, - [ - x, - y, - ], - ), - returnValueForMissingStub: null, - ); - @override - void resizeTo( - int? x, - int? y, - ) => - super.noSuchMethod( - Invocation.method( - #resizeTo, - [ - x, - y, - ], - ), - returnValueForMissingStub: null, - ); - @override - void scroll([ - dynamic options_OR_x, - dynamic y, - Map? scrollOptions, - ]) => - super.noSuchMethod( - Invocation.method( - #scroll, - [ - options_OR_x, - y, - scrollOptions, - ], - ), - returnValueForMissingStub: null, - ); - @override - void scrollBy([ - dynamic options_OR_x, - dynamic y, - Map? scrollOptions, - ]) => - super.noSuchMethod( - Invocation.method( - #scrollBy, - [ - options_OR_x, - y, - scrollOptions, - ], - ), - returnValueForMissingStub: null, - ); - @override - void scrollTo([ - dynamic options_OR_x, - dynamic y, - Map? scrollOptions, - ]) => - super.noSuchMethod( - Invocation.method( - #scrollTo, - [ - options_OR_x, - y, - scrollOptions, - ], - ), - returnValueForMissingStub: null, - ); - @override - void stop() => super.noSuchMethod( - Invocation.method( - #stop, - [], - ), - returnValueForMissingStub: null, - ); - @override - _i3.Future<_i2.Entry> resolveLocalFileSystemUrl(String? url) => - (super.noSuchMethod( - Invocation.method( - #resolveLocalFileSystemUrl, - [url], - ), - returnValue: _i3.Future<_i2.Entry>.value(_FakeEntry_12( - this, - Invocation.method( - #resolveLocalFileSystemUrl, - [url], - ), - )), - ) as _i3.Future<_i2.Entry>); - @override - String atob(String? atob) => (super.noSuchMethod( - Invocation.method( - #atob, - [atob], - ), - returnValue: '', - ) as String); - @override - String btoa(String? btoa) => (super.noSuchMethod( - Invocation.method( - #btoa, - [btoa], - ), - returnValue: '', - ) as String); - @override - void moveTo(_i4.Point? p) => super.noSuchMethod( - Invocation.method( - #moveTo, - [p], - ), - returnValueForMissingStub: null, - ); - @override - void addEventListener( - String? type, - _i2.EventListener? listener, [ - bool? useCapture, - ]) => - super.noSuchMethod( - Invocation.method( - #addEventListener, - [ - type, - listener, - useCapture, - ], - ), - returnValueForMissingStub: null, - ); - @override - void removeEventListener( - String? type, - _i2.EventListener? listener, [ - bool? useCapture, - ]) => - super.noSuchMethod( - Invocation.method( - #removeEventListener, - [ - type, - listener, - useCapture, - ], - ), - returnValueForMissingStub: null, - ); - @override - bool dispatchEvent(_i2.Event? event) => (super.noSuchMethod( - Invocation.method( - #dispatchEvent, - [event], - ), - returnValue: false, - ) as bool); } /// A class which mocks [Navigator]. @@ -1161,201 +35,4 @@ class MockNavigator extends _i1.Mock implements _i2.Navigator { MockNavigator() { _i1.throwOnMissingStub(this); } - - @override - String get language => (super.noSuchMethod( - Invocation.getter(#language), - returnValue: '', - ) as String); - @override - _i2.Geolocation get geolocation => (super.noSuchMethod( - Invocation.getter(#geolocation), - returnValue: _FakeGeolocation_13( - this, - Invocation.getter(#geolocation), - ), - ) as _i2.Geolocation); - @override - String get vendor => (super.noSuchMethod( - Invocation.getter(#vendor), - returnValue: '', - ) as String); - @override - String get vendorSub => (super.noSuchMethod( - Invocation.getter(#vendorSub), - returnValue: '', - ) as String); - @override - String get appCodeName => (super.noSuchMethod( - Invocation.getter(#appCodeName), - returnValue: '', - ) as String); - @override - String get appName => (super.noSuchMethod( - Invocation.getter(#appName), - returnValue: '', - ) as String); - @override - String get appVersion => (super.noSuchMethod( - Invocation.getter(#appVersion), - returnValue: '', - ) as String); - @override - String get product => (super.noSuchMethod( - Invocation.getter(#product), - returnValue: '', - ) as String); - @override - String get userAgent => (super.noSuchMethod( - Invocation.getter(#userAgent), - returnValue: '', - ) as String); - @override - List<_i2.Gamepad?> getGamepads() => (super.noSuchMethod( - Invocation.method( - #getGamepads, - [], - ), - returnValue: <_i2.Gamepad?>[], - ) as List<_i2.Gamepad?>); - @override - _i3.Future<_i2.MediaStream> getUserMedia({ - dynamic audio = false, - dynamic video = false, - }) => - (super.noSuchMethod( - Invocation.method( - #getUserMedia, - [], - { - #audio: audio, - #video: video, - }, - ), - returnValue: _i3.Future<_i2.MediaStream>.value(_FakeMediaStream_14( - this, - Invocation.method( - #getUserMedia, - [], - { - #audio: audio, - #video: video, - }, - ), - )), - ) as _i3.Future<_i2.MediaStream>); - @override - void cancelKeyboardLock() => super.noSuchMethod( - Invocation.method( - #cancelKeyboardLock, - [], - ), - returnValueForMissingStub: null, - ); - @override - _i3.Future getBattery() => (super.noSuchMethod( - Invocation.method( - #getBattery, - [], - ), - returnValue: _i3.Future.value(), - ) as _i3.Future); - @override - _i3.Future<_i2.RelatedApplication> getInstalledRelatedApps() => - (super.noSuchMethod( - Invocation.method( - #getInstalledRelatedApps, - [], - ), - returnValue: - _i3.Future<_i2.RelatedApplication>.value(_FakeRelatedApplication_15( - this, - Invocation.method( - #getInstalledRelatedApps, - [], - ), - )), - ) as _i3.Future<_i2.RelatedApplication>); - @override - _i3.Future getVRDisplays() => (super.noSuchMethod( - Invocation.method( - #getVRDisplays, - [], - ), - returnValue: _i3.Future.value(), - ) as _i3.Future); - @override - void registerProtocolHandler( - String? scheme, - String? url, - String? title, - ) => - super.noSuchMethod( - Invocation.method( - #registerProtocolHandler, - [ - scheme, - url, - title, - ], - ), - returnValueForMissingStub: null, - ); - @override - _i3.Future requestKeyboardLock([List? keyCodes]) => - (super.noSuchMethod( - Invocation.method( - #requestKeyboardLock, - [keyCodes], - ), - returnValue: _i3.Future.value(), - ) as _i3.Future); - @override - _i3.Future requestMidiAccess([Map? options]) => - (super.noSuchMethod( - Invocation.method( - #requestMidiAccess, - [options], - ), - returnValue: _i3.Future.value(), - ) as _i3.Future); - @override - _i3.Future requestMediaKeySystemAccess( - String? keySystem, - List>? supportedConfigurations, - ) => - (super.noSuchMethod( - Invocation.method( - #requestMediaKeySystemAccess, - [ - keySystem, - supportedConfigurations, - ], - ), - returnValue: _i3.Future.value(), - ) as _i3.Future); - @override - bool sendBeacon( - String? url, - Object? data, - ) => - (super.noSuchMethod( - Invocation.method( - #sendBeacon, - [ - url, - data, - ], - ), - returnValue: false, - ) as bool); - @override - _i3.Future share([Map? data]) => - (super.noSuchMethod( - Invocation.method( - #share, - [data], - ), - returnValue: _i3.Future.value(), - ) as _i3.Future); } diff --git a/packages/url_launcher/url_launcher_web/example/pubspec.yaml b/packages/url_launcher/url_launcher_web/example/pubspec.yaml index 9915164471a..a9dc3d1bad5 100644 --- a/packages/url_launcher/url_launcher_web/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/example/pubspec.yaml @@ -19,3 +19,4 @@ dev_dependencies: url_launcher_platform_interface: ^2.0.3 url_launcher_web: path: ../ + web: ^0.1.4-beta diff --git a/packages/url_launcher/url_launcher_web/lib/src/link.dart b/packages/url_launcher/url_launcher_web/lib/src/link.dart index b1589ba8899..3185b9e6067 100644 --- a/packages/url_launcher/url_launcher_web/lib/src/link.dart +++ b/packages/url_launcher/url_launcher_web/lib/src/link.dart @@ -3,7 +3,7 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:html' as html; +import 'dart:js_interop'; import 'dart:js_util'; import 'dart:ui_web' as ui_web; @@ -13,6 +13,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:url_launcher_platform_interface/link.dart'; +import 'package:web/web.dart' as html; /// The unique identifier for the view type to be used for link platform views. const String linkViewType = '__url_launcher::link'; @@ -104,7 +105,8 @@ class LinkViewController extends PlatformViewController { if (_instances.isEmpty) { // This is the first controller being created, attach the global click // listener. - _clickSubscription = html.window.onClick.listen(_onGlobalClick); + _jsListenFunction = _onGlobalClick.toJS; + html.window.addEventListener('click', _jsListenFunction); } _instances[viewId] = this; } @@ -137,7 +139,7 @@ class LinkViewController extends PlatformViewController { static int? _hitTestedViewId; - static late StreamSubscription _clickSubscription; + static late JSExportedDartFunction _jsListenFunction; static void _onGlobalClick(html.MouseEvent event) { final int? viewId = getViewIdFromTarget(event); @@ -164,10 +166,10 @@ class LinkViewController extends PlatformViewController { @override final int viewId; - late html.Element _element; + late html.HTMLElement _element; Future _initialize() async { - _element = html.Element.tag('a'); + _element = html.document.createElement('a') as html.HTMLElement; setProperty(_element, linkViewIdProperty, viewId); _element.style ..opacity = '0' @@ -269,7 +271,7 @@ class LinkViewController extends PlatformViewController { assert(_instances[viewId] == this); _instances.remove(viewId); if (_instances.isEmpty) { - await _clickSubscription.cancel(); + html.window.removeEventListener('click', _jsListenFunction); } await SystemChannels.platform_views.invokeMethod('dispose', viewId); } diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart index be40539d473..b4337aa0492 100644 --- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart +++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart @@ -3,13 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:html' as html; import 'dart:ui_web' as ui_web; import 'package:flutter/foundation.dart' show visibleForTesting; import 'package:flutter_web_plugins/flutter_web_plugins.dart' show Registrar; import 'package:url_launcher_platform_interface/link.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; +import 'package:web/web.dart' as html; import 'src/link.dart'; @@ -62,12 +62,11 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { /// /// Returns the newly created window. @visibleForTesting - html.WindowBase openNewWindow(String url, {String? webOnlyWindowName}) { + html.Window? openNewWindow(String url, {String? webOnlyWindowName}) { // We need to open mailto, tel and sms urls on the _top window context on safari browsers. // See https://github.com/flutter/flutter/issues/51461 for reference. final String target = webOnlyWindowName ?? ((_isSafari && _isSafariTargetTopScheme(url)) ? '_top' : ''); - // ignore: unsafe_html return _window.open(url, target); } diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index fce7da421b1..9df59dd3292 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -22,6 +22,7 @@ dependencies: flutter_web_plugins: sdk: flutter url_launcher_platform_interface: ^2.0.3 + web: ^0.1.4-beta dev_dependencies: flutter_test: From 821a8c14ea5e73fa671dec7d0e574d61471b2b61 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 21 Sep 2023 09:34:52 -0700 Subject: [PATCH 03/21] url_launcher_web: move to latest pkg:web, use stream helper for events --- .../url_launcher_web/example/pubspec.yaml | 2 +- .../url_launcher_web/lib/src/link.dart | 14 ++++++++------ .../url_launcher/url_launcher_web/pubspec.yaml | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/example/pubspec.yaml b/packages/url_launcher/url_launcher_web/example/pubspec.yaml index a9dc3d1bad5..32fe5edea9d 100644 --- a/packages/url_launcher/url_launcher_web/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/example/pubspec.yaml @@ -19,4 +19,4 @@ dev_dependencies: url_launcher_platform_interface: ^2.0.3 url_launcher_web: path: ../ - web: ^0.1.4-beta + web: ^0.2.1-beta diff --git a/packages/url_launcher/url_launcher_web/lib/src/link.dart b/packages/url_launcher/url_launcher_web/lib/src/link.dart index 3185b9e6067..b2217fafb80 100644 --- a/packages/url_launcher/url_launcher_web/lib/src/link.dart +++ b/packages/url_launcher/url_launcher_web/lib/src/link.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:js_interop'; import 'dart:js_util'; import 'dart:ui_web' as ui_web; @@ -13,7 +12,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:url_launcher_platform_interface/link.dart'; -import 'package:web/web.dart' as html; +import 'package:web/helpers.dart' as html; /// The unique identifier for the view type to be used for link platform views. const String linkViewType = '__url_launcher::link'; @@ -105,8 +104,11 @@ class LinkViewController extends PlatformViewController { if (_instances.isEmpty) { // This is the first controller being created, attach the global click // listener. - _jsListenFunction = _onGlobalClick.toJS; - html.window.addEventListener('click', _jsListenFunction); + + _clickSubscription = + const html.EventStreamProvider('click') + .forTarget(html.window) + .listen(_onGlobalClick); } _instances[viewId] = this; } @@ -139,7 +141,7 @@ class LinkViewController extends PlatformViewController { static int? _hitTestedViewId; - static late JSExportedDartFunction _jsListenFunction; + static late StreamSubscription _clickSubscription; static void _onGlobalClick(html.MouseEvent event) { final int? viewId = getViewIdFromTarget(event); @@ -271,7 +273,7 @@ class LinkViewController extends PlatformViewController { assert(_instances[viewId] == this); _instances.remove(viewId); if (_instances.isEmpty) { - html.window.removeEventListener('click', _jsListenFunction); + await _clickSubscription.cancel(); } await SystemChannels.platform_views.invokeMethod('dispose', viewId); } diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 9df59dd3292..827c6eb0397 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: flutter_web_plugins: sdk: flutter url_launcher_platform_interface: ^2.0.3 - web: ^0.1.4-beta + web: ^0.2.1-beta dev_dependencies: flutter_test: From f3818724dcb2b7461a6ecdbe59a9f0ca19ebff79 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 11 Oct 2023 12:17:44 -0700 Subject: [PATCH 04/21] Bump shared_preferences pkg:web beta dep --- packages/shared_preferences/shared_preferences_web/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index 77b96e4c3e0..910cab3561e 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: flutter_web_plugins: sdk: flutter shared_preferences_platform_interface: ^2.3.0 - web: ^0.1.4-beta + web: ^0.2.2-beta dev_dependencies: flutter_test: From 88e6820afa88e376bc59b7a08fca9a0f8124a9eb Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 11 Oct 2023 17:29:45 -0700 Subject: [PATCH 05/21] Bump pkg:web versions --- packages/shared_preferences/shared_preferences_web/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_web/example/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_web/pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index 910cab3561e..ff00aecdde9 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: flutter_web_plugins: sdk: flutter shared_preferences_platform_interface: ^2.3.0 - web: ^0.2.2-beta + web: ^0.3.0 dev_dependencies: flutter_test: diff --git a/packages/url_launcher/url_launcher_web/example/pubspec.yaml b/packages/url_launcher/url_launcher_web/example/pubspec.yaml index 32fe5edea9d..1daae083e95 100644 --- a/packages/url_launcher/url_launcher_web/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/example/pubspec.yaml @@ -19,4 +19,4 @@ dev_dependencies: url_launcher_platform_interface: ^2.0.3 url_launcher_web: path: ../ - web: ^0.2.1-beta + web: ^0.3.0 diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 827c6eb0397..09803e0fbe4 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: flutter_web_plugins: sdk: flutter url_launcher_platform_interface: ^2.0.3 - web: ^0.2.1-beta + web: ^0.3.0 dev_dependencies: flutter_test: From 3e07c864c3efe61a0cafb76c2357943cd720038d Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 12 Oct 2023 15:31:18 -0700 Subject: [PATCH 06/21] file_selector_web: moved to pkg:web --- .../file_selector/example/.gitignore | 1 - .../file_selector/example/pubspec.yaml | 4 ++ .../integration_test/dom_helper_test.dart | 20 +++++----- .../file_selector_web_test.dart | 4 +- .../file_selector_web/example/pubspec.yaml | 1 + .../file_selector_web/lib/src/dom_helper.dart | 39 +++++++++++-------- .../file_selector_web/pubspec.yaml | 3 +- 7 files changed, 43 insertions(+), 29 deletions(-) diff --git a/packages/file_selector/file_selector/example/.gitignore b/packages/file_selector/file_selector/example/.gitignore index f3c205341e7..15443889d06 100644 --- a/packages/file_selector/file_selector/example/.gitignore +++ b/packages/file_selector/file_selector/example/.gitignore @@ -32,7 +32,6 @@ /build/ # Web related -lib/generated_plugin_registrant.dart # Symbolication related app.*.symbols diff --git a/packages/file_selector/file_selector/example/pubspec.yaml b/packages/file_selector/file_selector/example/pubspec.yaml index 1aa566d59fe..51bd9a280d2 100644 --- a/packages/file_selector/file_selector/example/pubspec.yaml +++ b/packages/file_selector/file_selector/example/pubspec.yaml @@ -27,3 +27,7 @@ dev_dependencies: flutter: uses-material-design: true + +dependency_overrides: + file_selector_web: + path: ../../file_selector_web diff --git a/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart b/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart index d6cb47fe45b..70cf8b82196 100644 --- a/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart +++ b/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart @@ -2,23 +2,24 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:html'; +import 'dart:js_interop'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:file_selector_web/src/dom_helper.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; +import 'package:web/helpers.dart'; void main() { group('dom_helper', () { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); late DomHelper domHelper; - late FileUploadInputElement input; + late HTMLInputElement input; FileList? createFileList(List files) { final DataTransfer dataTransfer = DataTransfer(); - files.forEach(dataTransfer.items!.add); - return dataTransfer.files as FileList?; + files.forEach(dataTransfer.items.add); + return dataTransfer.files; } void setFilesAndTriggerEvent(List files, Event event) { @@ -36,12 +37,13 @@ void main() { setUp(() { domHelper = DomHelper(); - input = FileUploadInputElement(); + input = (createElementTag('input') as HTMLInputElement)..type = 'file'; }); group('getFiles', () { - final File mockFile1 = File(['123456'], 'file1.txt'); - final File mockFile2 = File([], 'file2.txt'); + final File mockFile1 = + File(['123456'].jsify as JSArray, 'file1.txt'); + final File mockFile2 = File([].jsify as JSArray, 'file2.txt'); testWidgets('works', (_) async { final Future> futureFiles = domHelper.getFiles( @@ -114,7 +116,7 @@ void main() { input: input, ); - expect(input.matchesWithAncestors('body'), true); + expect(input.matches('body'), true); expect(input.accept, accept); expect(input.multiple, multiple); expect( @@ -128,7 +130,7 @@ void main() { await futureFile; // It should be already removed from the DOM after the file is resolved. - expect(input.parent, isNull); + expect(input.parentElement, isNull); }); }); }); diff --git a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart index f64c08de056..f3d4c1ebf3e 100644 --- a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart +++ b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:html'; import 'dart:typed_data'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; @@ -10,6 +9,7 @@ import 'package:file_selector_web/file_selector_web.dart'; import 'package:file_selector_web/src/dom_helper.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; +import 'package:web/helpers.dart'; void main() { group('FileSelectorWeb', () { @@ -121,7 +121,7 @@ class MockDomHelper implements DomHelper { Future> getFiles({ String accept = '', bool multiple = false, - FileUploadInputElement? input, + HTMLInputElement? input, }) { expect(accept, _expectedAccept, reason: 'Expected "accept" value does not match.'); diff --git a/packages/file_selector/file_selector_web/example/pubspec.yaml b/packages/file_selector/file_selector_web/example/pubspec.yaml index 0efe95c570c..2a2d9cf3139 100644 --- a/packages/file_selector/file_selector_web/example/pubspec.yaml +++ b/packages/file_selector/file_selector_web/example/pubspec.yaml @@ -11,6 +11,7 @@ dependencies: path: ../ flutter: sdk: flutter + web: ^0.3.0 dev_dependencies: flutter_test: diff --git a/packages/file_selector/file_selector_web/lib/src/dom_helper.dart b/packages/file_selector/file_selector_web/lib/src/dom_helper.dart index e600778b7dc..5d0e33a7806 100644 --- a/packages/file_selector/file_selector_web/lib/src/dom_helper.dart +++ b/packages/file_selector/file_selector_web/lib/src/dom_helper.dart @@ -3,41 +3,46 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:html'; +import 'dart:js_interop'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:flutter/foundation.dart' show visibleForTesting; import 'package:flutter/services.dart'; +import 'package:web/helpers.dart'; /// Class to manipulate the DOM with the intention of reading files from it. class DomHelper { /// Default constructor, initializes the container DOM element. DomHelper() { final Element body = querySelector('body')!; - body.children.add(_container); + body.appendChild(_container); } - final Element _container = Element.tag('file-selector'); + final Element _container = createElementTag('file-selector'); /// Sets the attributes and waits for a file to be selected. Future> getFiles({ String accept = '', bool multiple = false, - @visibleForTesting FileUploadInputElement? input, + @visibleForTesting HTMLInputElement? input, }) { final Completer> completer = Completer>(); - final FileUploadInputElement inputElement = - input ?? FileUploadInputElement(); + final HTMLInputElement inputElement = + input ?? (createElementTag('input') as HTMLInputElement) + ..type = 'file'; - _container.children.add( + _container.appendChild( inputElement ..accept = accept ..multiple = multiple, ); inputElement.onChange.first.then((_) { - final List files = - inputElement.files!.map(_convertFileToXFile).toList(); + final List files = Iterable.generate( + inputElement.files!.length, + (int i) => inputElement.files!.item(i)!) + .map(_convertFileToXFile) + .toList(); inputElement.remove(); completer.complete(files); }); @@ -52,10 +57,13 @@ class DomHelper { completer.completeError(platformException); }); - inputElement.addEventListener('cancel', (Event event) { - inputElement.remove(); - completer.complete([]); - }); + inputElement.addEventListener( + 'cancel', + (Event event) { + inputElement.remove(); + completer.complete([]); + }.toJS, + ); // TODO(dit): Reimplement this with the showPicker() API, https://github.com/flutter/flutter/issues/130365 inputElement.click(); @@ -64,10 +72,9 @@ class DomHelper { } XFile _convertFileToXFile(File file) => XFile( - Url.createObjectUrl(file), + URL.createObjectURL(file), name: file.name, length: file.size, - lastModified: DateTime.fromMillisecondsSinceEpoch( - file.lastModified ?? DateTime.now().millisecondsSinceEpoch), + lastModified: DateTime.fromMillisecondsSinceEpoch(file.lastModified), ); } diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index 8198aae05e8..91df17cb719 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -5,7 +5,7 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.9.2+1 environment: - sdk: ">=2.19.0 <4.0.0" + sdk: "^3.2.0-beta" flutter: ">=3.7.0" flutter: @@ -22,6 +22,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter + web: ^0.3.0 dev_dependencies: flutter_test: From 43d204b5cffc0afea44ed05df06c486c86517fa0 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 14:12:51 -0800 Subject: [PATCH 07/21] update pubspec and changelog --- packages/file_selector/file_selector_web/CHANGELOG.md | 4 ++++ packages/file_selector/file_selector_web/pubspec.yaml | 5 ++--- .../shared_preferences/shared_preferences_web/CHANGELOG.md | 4 ++++ .../shared_preferences/shared_preferences_web/pubspec.yaml | 5 ++--- packages/url_launcher/url_launcher_web/CHANGELOG.md | 4 ++++ packages/url_launcher/url_launcher_web/pubspec.yaml | 5 ++--- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/file_selector/file_selector_web/CHANGELOG.md b/packages/file_selector/file_selector_web/CHANGELOG.md index f81c7921f0b..7391ceb875e 100644 --- a/packages/file_selector/file_selector_web/CHANGELOG.md +++ b/packages/file_selector/file_selector_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.3 + +* Updates minimum supported SDK version to Dart 3.2. + ## 0.9.2+1 * Adds pub topics to package metadata. diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index 91df17cb719..59fe6058db2 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -2,11 +2,10 @@ name: file_selector_web description: Web platform implementation of file_selector repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.2+1 +version: 0.9.3 environment: - sdk: "^3.2.0-beta" - flutter: ">=3.7.0" + sdk: ^3.2.0 flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md index 8e47e1f5ede..5f5d8c246cd 100644 --- a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.2 + +* Updates minimum supported SDK version to Dart 3.2. + ## 2.2.1 * Adds pub topics to package metadata. diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index ff00aecdde9..dac74194b97 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -2,11 +2,10 @@ name: shared_preferences_web description: Web platform implementation of shared_preferences repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.2.1 +version: 2.2.2 environment: - sdk: ">=2.19.0 <4.0.0" - flutter: ">=3.7.0" + sdk: ^3.2.0 flutter: plugin: diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index 76979c9c4c6..6088079c009 100644 --- a/packages/url_launcher/url_launcher_web/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.1 + +* Updates minimum supported SDK version to Dart 3.2. + ## 2.2.0 * Implements `supportsMode` and `supportsCloseForMode`. diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 1d0c57a7061..3e9e473075f 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -2,11 +2,10 @@ name: url_launcher_web description: Web platform implementation of url_launcher repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 -version: 2.2.0 +version: 2.2.1 environment: - sdk: ">=3.1.0 <4.0.0" - flutter: ">=3.13.0" + sdk: ^3.2.0 flutter: plugin: From 4844d30ed5a935d8212a13a408d302ac6cfbbd8f Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 14:13:58 -0800 Subject: [PATCH 08/21] support wide range --- packages/file_selector/file_selector_web/example/pubspec.yaml | 2 +- packages/file_selector/file_selector_web/pubspec.yaml | 2 +- packages/shared_preferences/shared_preferences_web/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_web/example/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_web/pubspec.yaml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/file_selector/file_selector_web/example/pubspec.yaml b/packages/file_selector/file_selector_web/example/pubspec.yaml index 2a2d9cf3139..b5166a65d70 100644 --- a/packages/file_selector/file_selector_web/example/pubspec.yaml +++ b/packages/file_selector/file_selector_web/example/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: path: ../ flutter: sdk: flutter - web: ^0.3.0 + web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index 59fe6058db2..87c133c3ffc 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter - web: ^0.3.0 + web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index dac74194b97..dac09bd7e95 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: flutter_web_plugins: sdk: flutter shared_preferences_platform_interface: ^2.3.0 - web: ^0.3.0 + web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: diff --git a/packages/url_launcher/url_launcher_web/example/pubspec.yaml b/packages/url_launcher/url_launcher_web/example/pubspec.yaml index 0b4bd8c2d9e..4410f83ab08 100644 --- a/packages/url_launcher/url_launcher_web/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/example/pubspec.yaml @@ -19,4 +19,4 @@ dev_dependencies: url_launcher_platform_interface: ^2.2.0 url_launcher_web: path: ../ - web: ^0.3.0 + web: '>=0.3.0 <0.5.0' diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 3e9e473075f..4b968100b10 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: flutter_web_plugins: sdk: flutter url_launcher_platform_interface: ^2.2.0 - web: ^0.3.0 + web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: From 31afe9816e3f9e6c04ad287c46156fa4564ea202 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 15:26:11 -0800 Subject: [PATCH 09/21] revert changes to file_selector --- packages/file_selector/file_selector/example/.gitignore | 1 + packages/file_selector/file_selector/example/pubspec.yaml | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/file_selector/file_selector/example/.gitignore b/packages/file_selector/file_selector/example/.gitignore index 15443889d06..f3c205341e7 100644 --- a/packages/file_selector/file_selector/example/.gitignore +++ b/packages/file_selector/file_selector/example/.gitignore @@ -32,6 +32,7 @@ /build/ # Web related +lib/generated_plugin_registrant.dart # Symbolication related app.*.symbols diff --git a/packages/file_selector/file_selector/example/pubspec.yaml b/packages/file_selector/file_selector/example/pubspec.yaml index 51bd9a280d2..1aa566d59fe 100644 --- a/packages/file_selector/file_selector/example/pubspec.yaml +++ b/packages/file_selector/file_selector/example/pubspec.yaml @@ -27,7 +27,3 @@ dev_dependencies: flutter: uses-material-design: true - -dependency_overrides: - file_selector_web: - path: ../../file_selector_web From d22b3f9a269b88de4152808cbe15d6dda9e36042 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 15:29:05 -0800 Subject: [PATCH 10/21] put back flutter constraints --- packages/file_selector/file_selector_web/pubspec.yaml | 1 + packages/shared_preferences/shared_preferences_web/pubspec.yaml | 1 + packages/url_launcher/url_launcher_web/pubspec.yaml | 1 + 3 files changed, 3 insertions(+) diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index 87c133c3ffc..11dfbf030bd 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -6,6 +6,7 @@ version: 0.9.3 environment: sdk: ^3.2.0 + flutter: ">=3.7.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index dac09bd7e95..e158e30945d 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -6,6 +6,7 @@ version: 2.2.2 environment: sdk: ^3.2.0 + flutter: ">=3.7.0" flutter: plugin: diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 4b968100b10..85325bde2be 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -6,6 +6,7 @@ version: 2.2.1 environment: sdk: ^3.2.0 + flutter: ">=3.13.0" flutter: plugin: From 94cecca4fd21dfd34c8f3db4318ab0b318ae2f2d Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 15:30:57 -0800 Subject: [PATCH 11/21] whitelist pkg:web --- script/configs/allowed_unpinned_deps.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/script/configs/allowed_unpinned_deps.yaml b/script/configs/allowed_unpinned_deps.yaml index 2c2345da9ae..fe4c138b0a6 100644 --- a/script/configs/allowed_unpinned_deps.yaml +++ b/script/configs/allowed_unpinned_deps.yaml @@ -51,6 +51,7 @@ - test_api - vm_service - wasm +- web - yaml # Google-owned packages - _discoveryapis_commons From a8672021cba2903162f9ad29e2b435ef719476e9 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 16:04:25 -0800 Subject: [PATCH 12/21] more flutter version silly --- packages/file_selector/file_selector_web/pubspec.yaml | 2 +- packages/shared_preferences/shared_preferences_web/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_web/pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index 11dfbf030bd..dcf6820816f 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 0.9.3 environment: sdk: ^3.2.0 - flutter: ">=3.7.0" + flutter: ^3.16.0 flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index e158e30945d..2e9647d6991 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 2.2.2 environment: sdk: ^3.2.0 - flutter: ">=3.7.0" + flutter: ^3.16.0 flutter: plugin: diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 85325bde2be..d8c1e13078d 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 2.2.1 environment: sdk: ^3.2.0 - flutter: ">=3.13.0" + flutter: ^3.16.0 flutter: plugin: From c897a6cd9a408e6ac86f39e05e7f501ab71061fd Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 16:50:09 -0800 Subject: [PATCH 13/21] flutter version fix --- packages/file_selector/file_selector_web/pubspec.yaml | 2 +- packages/shared_preferences/shared_preferences_web/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_web/pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index dcf6820816f..2b4ba7f54fe 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 0.9.3 environment: sdk: ^3.2.0 - flutter: ^3.16.0 + flutter: ">3.16.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index 2e9647d6991..f213cc8dfb6 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 2.2.2 environment: sdk: ^3.2.0 - flutter: ^3.16.0 + flutter: ">3.16.0" flutter: plugin: diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index d8c1e13078d..6e84f687fb5 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 2.2.1 environment: sdk: ^3.2.0 - flutter: ^3.16.0 + flutter: ">3.16.0" flutter: plugin: From d1af42f9480454f9263499afb0e0d495232e8f02 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 17:09:52 -0800 Subject: [PATCH 14/21] smaller diff --- .../lib/shared_preferences_web.dart | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart index 0462bd26bc5..fc79890e0b9 100644 --- a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart +++ b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart @@ -42,11 +42,8 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { // IMPORTANT: Do not use html.window.localStorage.clear() as that will // remove _all_ local data, not just the keys prefixed with // _prefix - // ignore: prefer_foreach - for (final String item - in _getFilteredKeys(filter.prefix, allowList: filter.allowList)) { - html.window.localStorage.removeItem(item); - } + _getFilteredKeys(filter.prefix, allowList: filter.allowList) + .forEach((String i) => html.window.localStorage.removeItem(i)); return true; } @@ -92,13 +89,9 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { Iterable _getFilteredKeys( String prefix, { Set? allowList, - }) sync* { - for (int i = 0; i < html.window.localStorage.length; i++) { - final String key = html.window.localStorage.key(i)!; - if (key.startsWith(prefix) && (allowList?.contains(key) ?? true)) { - yield key; - } - } + }) { + return html.window.localStorage.keys.where((String key) => + key.startsWith(prefix) && (allowList?.contains(key) ?? true)); } String _encodeValue(Object? value) { @@ -118,3 +111,11 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { return decodedValue!; } } + +extension on html.Storage { + Iterable get keys sync* { + for (int i = 0; i < html.window.localStorage.length; i++) { + yield html.window.localStorage.key(i)!; + } + } +} From d575456c6212650c01c3d68d214780e34aa5f0ac Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 17:19:52 -0800 Subject: [PATCH 15/21] ugh --- packages/file_selector/file_selector_web/pubspec.yaml | 2 +- .../shared_preferences_web/lib/shared_preferences_web.dart | 3 ++- .../shared_preferences/shared_preferences_web/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_web/pubspec.yaml | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index 2b4ba7f54fe..3c3ca15c3aa 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 0.9.3 environment: sdk: ^3.2.0 - flutter: ">3.16.0" + flutter: ">=3.16.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart index fc79890e0b9..10bea9e2b36 100644 --- a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart +++ b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart @@ -43,7 +43,7 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { // remove _all_ local data, not just the keys prefixed with // _prefix _getFilteredKeys(filter.prefix, allowList: filter.allowList) - .forEach((String i) => html.window.localStorage.removeItem(i)); + .forEach(html.window.localStorage.remove); return true; } @@ -113,6 +113,7 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { } extension on html.Storage { + void remove(String item) => removeItem(item); Iterable get keys sync* { for (int i = 0; i < html.window.localStorage.length; i++) { yield html.window.localStorage.key(i)!; diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index f213cc8dfb6..cbc4b793e4b 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 2.2.2 environment: sdk: ^3.2.0 - flutter: ">3.16.0" + flutter: ">=3.16.0" flutter: plugin: diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 6e84f687fb5..0c3b8ea0821 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -6,7 +6,7 @@ version: 2.2.1 environment: sdk: ^3.2.0 - flutter: ">3.16.0" + flutter: ">=3.16.0" flutter: plugin: From 97aecf95a0036393bd283a36eb879e652a245240 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 15 Nov 2023 20:59:46 -0800 Subject: [PATCH 16/21] update _dartSdkForFlutterSdk --- script/tool/lib/src/common/core.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/script/tool/lib/src/common/core.dart b/script/tool/lib/src/common/core.dart index 5e96c6214b2..2910301cda9 100644 --- a/script/tool/lib/src/common/core.dart +++ b/script/tool/lib/src/common/core.dart @@ -68,6 +68,7 @@ final Map _dartSdkForFlutterSdk = { Version(3, 10, 0): Version(3, 0, 0), Version(3, 10, 6): Version(3, 0, 6), Version(3, 13, 0): Version(3, 1, 0), + Version(3, 16, 0): Version(3, 2, 0), }; /// Returns the version of the Dart SDK that shipped with the given Flutter From 11d4fb162e544f0ae07ab18e806cb41cda309e9e Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 16 Nov 2023 09:11:38 -0800 Subject: [PATCH 17/21] revert changes for shared_prefs to unblock --- .../shared_preferences_web/CHANGELOG.md | 4 ---- .../lib/shared_preferences_web.dart | 17 ++++------------- .../shared_preferences_web/pubspec.yaml | 7 +++---- 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md index 5f5d8c246cd..8e47e1f5ede 100644 --- a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md @@ -1,7 +1,3 @@ -## 2.2.2 - -* Updates minimum supported SDK version to Dart 3.2. - ## 2.2.1 * Adds pub topics to package metadata. diff --git a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart index 10bea9e2b36..34c33ce82cf 100644 --- a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart +++ b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart @@ -4,11 +4,11 @@ import 'dart:async'; import 'dart:convert' show json; +import 'dart:html' as html; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; import 'package:shared_preferences_platform_interface/types.dart'; -import 'package:web/web.dart' as html; /// The web implementation of [SharedPreferencesStorePlatform]. /// @@ -69,20 +69,20 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { final Map allData = {}; for (final String key in _getFilteredKeys(filter.prefix, allowList: filter.allowList)) { - allData[key] = _decodeValue(html.window.localStorage.getItem(key)!); + allData[key] = _decodeValue(html.window.localStorage[key]!); } return allData; } @override Future remove(String key) async { - html.window.localStorage.removeItem(key); + html.window.localStorage.remove(key); return true; } @override Future setValue(String valueType, String key, Object? value) async { - html.window.localStorage.setItem(key, _encodeValue(value)); + html.window.localStorage[key] = _encodeValue(value); return true; } @@ -111,12 +111,3 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { return decodedValue!; } } - -extension on html.Storage { - void remove(String item) => removeItem(item); - Iterable get keys sync* { - for (int i = 0; i < html.window.localStorage.length; i++) { - yield html.window.localStorage.key(i)!; - } - } -} diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index cbc4b793e4b..522b25e641c 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -2,11 +2,11 @@ name: shared_preferences_web description: Web platform implementation of shared_preferences repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.2.2 +version: 2.2.1 environment: - sdk: ^3.2.0 - flutter: ">=3.16.0" + sdk: ">=2.19.0 <4.0.0" + flutter: ">=3.7.0" flutter: plugin: @@ -22,7 +22,6 @@ dependencies: flutter_web_plugins: sdk: flutter shared_preferences_platform_interface: ^2.3.0 - web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: From 3d30805d7871534a110226a04ffc220444771a71 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 16 Nov 2023 09:50:47 -0800 Subject: [PATCH 18/21] cast to handle two versions of pkg:web --- .../file_selector/file_selector_web/lib/src/dom_helper.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/file_selector/file_selector_web/lib/src/dom_helper.dart b/packages/file_selector/file_selector_web/lib/src/dom_helper.dart index 5d0e33a7806..9932c2e8616 100644 --- a/packages/file_selector/file_selector_web/lib/src/dom_helper.dart +++ b/packages/file_selector/file_selector_web/lib/src/dom_helper.dart @@ -72,7 +72,10 @@ class DomHelper { } XFile _convertFileToXFile(File file) => XFile( - URL.createObjectURL(file), + // TODO(srujzs): This is necessary in order to support package:web 0.4.0. + // This was not needed with 0.3.0, hence the lint. + // ignore: avoid-unnecessary-type-casts + URL.createObjectURL(file as JSObject), name: file.name, length: file.size, lastModified: DateTime.fromMillisecondsSinceEpoch(file.lastModified), From 315ad9b7ade4b8d95264b33f921192a37a48bbbc Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 16 Nov 2023 10:22:54 -0800 Subject: [PATCH 19/21] another cast --- .../example/integration_test/dom_helper_test.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart b/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart index 70cf8b82196..d4a1014252f 100644 --- a/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart +++ b/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart @@ -18,7 +18,12 @@ void main() { FileList? createFileList(List files) { final DataTransfer dataTransfer = DataTransfer(); - files.forEach(dataTransfer.items.add); + for (final File e in files) { + // TODO(srujzs): This is necessary in order to support package:web 0.4.0. + // This was not needed with 0.3.0, hence the lint. + // ignore: avoid-unnecessary-type-casts + dataTransfer.items.add(e as JSAny); + } return dataTransfer.files; } From e7bbc7fe7cff6412fc6c93b87bf983366c5f375c Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 16 Nov 2023 10:42:58 -0800 Subject: [PATCH 20/21] more lint fighting --- .../example/integration_test/dom_helper_test.dart | 2 +- .../file_selector/file_selector_web/lib/src/dom_helper.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart b/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart index d4a1014252f..09b15c2f0d7 100644 --- a/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart +++ b/packages/file_selector/file_selector_web/example/integration_test/dom_helper_test.dart @@ -21,7 +21,7 @@ void main() { for (final File e in files) { // TODO(srujzs): This is necessary in order to support package:web 0.4.0. // This was not needed with 0.3.0, hence the lint. - // ignore: avoid-unnecessary-type-casts + // ignore: unnecessary_cast dataTransfer.items.add(e as JSAny); } return dataTransfer.files; diff --git a/packages/file_selector/file_selector_web/lib/src/dom_helper.dart b/packages/file_selector/file_selector_web/lib/src/dom_helper.dart index 9932c2e8616..7684a12286d 100644 --- a/packages/file_selector/file_selector_web/lib/src/dom_helper.dart +++ b/packages/file_selector/file_selector_web/lib/src/dom_helper.dart @@ -74,7 +74,7 @@ class DomHelper { XFile _convertFileToXFile(File file) => XFile( // TODO(srujzs): This is necessary in order to support package:web 0.4.0. // This was not needed with 0.3.0, hence the lint. - // ignore: avoid-unnecessary-type-casts + // ignore: unnecessary_cast URL.createObjectURL(file as JSObject), name: file.name, length: file.size, From 2865d9297d26f22fb122e7785110835d77389d33 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 16 Nov 2023 11:25:01 -0800 Subject: [PATCH 21/21] just file things --- .../url_launcher_web/CHANGELOG.md | 4 - .../url_launcher_web_test.dart | 5 +- .../url_launcher_web_test.mocks.dart | 1476 ++++++++++++++++- .../url_launcher_web/example/pubspec.yaml | 1 - .../url_launcher_web/lib/src/link.dart | 12 +- .../lib/url_launcher_web.dart | 4 +- .../url_launcher_web/pubspec.yaml | 7 +- 7 files changed, 1487 insertions(+), 22 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index 6088079c009..76979c9c4c6 100644 --- a/packages/url_launcher/url_launcher_web/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md @@ -1,7 +1,3 @@ -## 2.2.1 - -* Updates minimum supported SDK version to Dart 3.2. - ## 2.2.0 * Implements `supportsMode` and `supportsCloseForMode`. diff --git a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart index 7d9510e4146..994e3b28bad 100644 --- a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart +++ b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart @@ -2,13 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:html' as html; + import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; import 'package:url_launcher_web/url_launcher_web.dart'; -import 'package:web/web.dart' as html; import 'url_launcher_web_test.mocks.dart'; @@ -28,7 +29,7 @@ void main() { when(mockWindow.navigator).thenReturn(mockNavigator); // Simulate that window.open does something. - when(mockWindow.open('any', 'any')).thenReturn(MockWindow()); + when(mockWindow.open(any, any, any)).thenReturn(MockWindow()); when(mockNavigator.userAgent).thenReturn( 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'); diff --git a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart index 5f4467a338a..13ff194eabc 100644 --- a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart +++ b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart @@ -5,8 +5,11 @@ // @dart=2.19 // ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; +import 'dart:html' as _i2; +import 'dart:math' as _i4; + import 'package:mockito/mockito.dart' as _i1; -import 'package:web/src/dom/html.dart' as _i2; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -19,6 +22,169 @@ import 'package:web/src/dom/html.dart' as _i2; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class +class _FakeDocument_0 extends _i1.SmartFake implements _i2.Document { + _FakeDocument_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeLocation_1 extends _i1.SmartFake implements _i2.Location { + _FakeLocation_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeConsole_2 extends _i1.SmartFake implements _i2.Console { + _FakeConsole_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeHistory_3 extends _i1.SmartFake implements _i2.History { + _FakeHistory_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeStorage_4 extends _i1.SmartFake implements _i2.Storage { + _FakeStorage_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeNavigator_5 extends _i1.SmartFake implements _i2.Navigator { + _FakeNavigator_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePerformance_6 extends _i1.SmartFake implements _i2.Performance { + _FakePerformance_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeEvents_7 extends _i1.SmartFake implements _i2.Events { + _FakeEvents_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeWindowBase_8 extends _i1.SmartFake implements _i2.WindowBase { + _FakeWindowBase_8( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeFileSystem_9 extends _i1.SmartFake implements _i2.FileSystem { + _FakeFileSystem_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeStylePropertyMapReadonly_10 extends _i1.SmartFake + implements _i2.StylePropertyMapReadonly { + _FakeStylePropertyMapReadonly_10( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeMediaQueryList_11 extends _i1.SmartFake + implements _i2.MediaQueryList { + _FakeMediaQueryList_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeEntry_12 extends _i1.SmartFake implements _i2.Entry { + _FakeEntry_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeGeolocation_13 extends _i1.SmartFake implements _i2.Geolocation { + _FakeGeolocation_13( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeMediaStream_14 extends _i1.SmartFake implements _i2.MediaStream { + _FakeMediaStream_14( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeRelatedApplication_15 extends _i1.SmartFake + implements _i2.RelatedApplication { + _FakeRelatedApplication_15( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + /// A class which mocks [Window]. /// /// See the documentation for Mockito's code generation for more information. @@ -26,6 +192,1097 @@ class MockWindow extends _i1.Mock implements _i2.Window { MockWindow() { _i1.throwOnMissingStub(this); } + + @override + _i3.Future get animationFrame => (super.noSuchMethod( + Invocation.getter(#animationFrame), + returnValue: _i3.Future.value(0), + ) as _i3.Future); + + @override + _i2.Document get document => (super.noSuchMethod( + Invocation.getter(#document), + returnValue: _FakeDocument_0( + this, + Invocation.getter(#document), + ), + ) as _i2.Document); + + @override + _i2.Location get location => (super.noSuchMethod( + Invocation.getter(#location), + returnValue: _FakeLocation_1( + this, + Invocation.getter(#location), + ), + ) as _i2.Location); + + @override + set location(_i2.LocationBase? value) => super.noSuchMethod( + Invocation.setter( + #location, + value, + ), + returnValueForMissingStub: null, + ); + + @override + _i2.Console get console => (super.noSuchMethod( + Invocation.getter(#console), + returnValue: _FakeConsole_2( + this, + Invocation.getter(#console), + ), + ) as _i2.Console); + + @override + set defaultStatus(String? value) => super.noSuchMethod( + Invocation.setter( + #defaultStatus, + value, + ), + returnValueForMissingStub: null, + ); + + @override + set defaultstatus(String? value) => super.noSuchMethod( + Invocation.setter( + #defaultstatus, + value, + ), + returnValueForMissingStub: null, + ); + + @override + num get devicePixelRatio => (super.noSuchMethod( + Invocation.getter(#devicePixelRatio), + returnValue: 0, + ) as num); + + @override + _i2.History get history => (super.noSuchMethod( + Invocation.getter(#history), + returnValue: _FakeHistory_3( + this, + Invocation.getter(#history), + ), + ) as _i2.History); + + @override + _i2.Storage get localStorage => (super.noSuchMethod( + Invocation.getter(#localStorage), + returnValue: _FakeStorage_4( + this, + Invocation.getter(#localStorage), + ), + ) as _i2.Storage); + + @override + set name(String? value) => super.noSuchMethod( + Invocation.setter( + #name, + value, + ), + returnValueForMissingStub: null, + ); + + @override + _i2.Navigator get navigator => (super.noSuchMethod( + Invocation.getter(#navigator), + returnValue: _FakeNavigator_5( + this, + Invocation.getter(#navigator), + ), + ) as _i2.Navigator); + + @override + set opener(_i2.WindowBase? value) => super.noSuchMethod( + Invocation.setter( + #opener, + value, + ), + returnValueForMissingStub: null, + ); + + @override + int get outerHeight => (super.noSuchMethod( + Invocation.getter(#outerHeight), + returnValue: 0, + ) as int); + + @override + int get outerWidth => (super.noSuchMethod( + Invocation.getter(#outerWidth), + returnValue: 0, + ) as int); + + @override + _i2.Performance get performance => (super.noSuchMethod( + Invocation.getter(#performance), + returnValue: _FakePerformance_6( + this, + Invocation.getter(#performance), + ), + ) as _i2.Performance); + + @override + _i2.Storage get sessionStorage => (super.noSuchMethod( + Invocation.getter(#sessionStorage), + returnValue: _FakeStorage_4( + this, + Invocation.getter(#sessionStorage), + ), + ) as _i2.Storage); + + @override + set status(String? value) => super.noSuchMethod( + Invocation.setter( + #status, + value, + ), + returnValueForMissingStub: null, + ); + + @override + _i3.Stream<_i2.Event> get onContentLoaded => (super.noSuchMethod( + Invocation.getter(#onContentLoaded), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onAbort => (super.noSuchMethod( + Invocation.getter(#onAbort), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onBlur => (super.noSuchMethod( + Invocation.getter(#onBlur), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onCanPlay => (super.noSuchMethod( + Invocation.getter(#onCanPlay), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onCanPlayThrough => (super.noSuchMethod( + Invocation.getter(#onCanPlayThrough), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onChange => (super.noSuchMethod( + Invocation.getter(#onChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.MouseEvent> get onClick => (super.noSuchMethod( + Invocation.getter(#onClick), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onContextMenu => (super.noSuchMethod( + Invocation.getter(#onContextMenu), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.Event> get onDoubleClick => (super.noSuchMethod( + Invocation.getter(#onDoubleClick), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.DeviceMotionEvent> get onDeviceMotion => (super.noSuchMethod( + Invocation.getter(#onDeviceMotion), + returnValue: _i3.Stream<_i2.DeviceMotionEvent>.empty(), + ) as _i3.Stream<_i2.DeviceMotionEvent>); + + @override + _i3.Stream<_i2.DeviceOrientationEvent> get onDeviceOrientation => + (super.noSuchMethod( + Invocation.getter(#onDeviceOrientation), + returnValue: _i3.Stream<_i2.DeviceOrientationEvent>.empty(), + ) as _i3.Stream<_i2.DeviceOrientationEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onDrag => (super.noSuchMethod( + Invocation.getter(#onDrag), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onDragEnd => (super.noSuchMethod( + Invocation.getter(#onDragEnd), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onDragEnter => (super.noSuchMethod( + Invocation.getter(#onDragEnter), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onDragLeave => (super.noSuchMethod( + Invocation.getter(#onDragLeave), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onDragOver => (super.noSuchMethod( + Invocation.getter(#onDragOver), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onDragStart => (super.noSuchMethod( + Invocation.getter(#onDragStart), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onDrop => (super.noSuchMethod( + Invocation.getter(#onDrop), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.Event> get onDurationChange => (super.noSuchMethod( + Invocation.getter(#onDurationChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onEmptied => (super.noSuchMethod( + Invocation.getter(#onEmptied), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onEnded => (super.noSuchMethod( + Invocation.getter(#onEnded), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onError => (super.noSuchMethod( + Invocation.getter(#onError), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onFocus => (super.noSuchMethod( + Invocation.getter(#onFocus), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onHashChange => (super.noSuchMethod( + Invocation.getter(#onHashChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onInput => (super.noSuchMethod( + Invocation.getter(#onInput), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onInvalid => (super.noSuchMethod( + Invocation.getter(#onInvalid), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.KeyboardEvent> get onKeyDown => (super.noSuchMethod( + Invocation.getter(#onKeyDown), + returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), + ) as _i3.Stream<_i2.KeyboardEvent>); + + @override + _i3.Stream<_i2.KeyboardEvent> get onKeyPress => (super.noSuchMethod( + Invocation.getter(#onKeyPress), + returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), + ) as _i3.Stream<_i2.KeyboardEvent>); + + @override + _i3.Stream<_i2.KeyboardEvent> get onKeyUp => (super.noSuchMethod( + Invocation.getter(#onKeyUp), + returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), + ) as _i3.Stream<_i2.KeyboardEvent>); + + @override + _i3.Stream<_i2.Event> get onLoad => (super.noSuchMethod( + Invocation.getter(#onLoad), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onLoadedData => (super.noSuchMethod( + Invocation.getter(#onLoadedData), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onLoadedMetadata => (super.noSuchMethod( + Invocation.getter(#onLoadedMetadata), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onLoadStart => (super.noSuchMethod( + Invocation.getter(#onLoadStart), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.MessageEvent> get onMessage => (super.noSuchMethod( + Invocation.getter(#onMessage), + returnValue: _i3.Stream<_i2.MessageEvent>.empty(), + ) as _i3.Stream<_i2.MessageEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onMouseDown => (super.noSuchMethod( + Invocation.getter(#onMouseDown), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onMouseEnter => (super.noSuchMethod( + Invocation.getter(#onMouseEnter), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onMouseLeave => (super.noSuchMethod( + Invocation.getter(#onMouseLeave), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onMouseMove => (super.noSuchMethod( + Invocation.getter(#onMouseMove), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onMouseOut => (super.noSuchMethod( + Invocation.getter(#onMouseOut), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onMouseOver => (super.noSuchMethod( + Invocation.getter(#onMouseOver), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.MouseEvent> get onMouseUp => (super.noSuchMethod( + Invocation.getter(#onMouseUp), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + + @override + _i3.Stream<_i2.WheelEvent> get onMouseWheel => (super.noSuchMethod( + Invocation.getter(#onMouseWheel), + returnValue: _i3.Stream<_i2.WheelEvent>.empty(), + ) as _i3.Stream<_i2.WheelEvent>); + + @override + _i3.Stream<_i2.Event> get onOffline => (super.noSuchMethod( + Invocation.getter(#onOffline), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onOnline => (super.noSuchMethod( + Invocation.getter(#onOnline), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onPageHide => (super.noSuchMethod( + Invocation.getter(#onPageHide), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onPageShow => (super.noSuchMethod( + Invocation.getter(#onPageShow), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onPause => (super.noSuchMethod( + Invocation.getter(#onPause), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onPlay => (super.noSuchMethod( + Invocation.getter(#onPlay), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onPlaying => (super.noSuchMethod( + Invocation.getter(#onPlaying), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.PopStateEvent> get onPopState => (super.noSuchMethod( + Invocation.getter(#onPopState), + returnValue: _i3.Stream<_i2.PopStateEvent>.empty(), + ) as _i3.Stream<_i2.PopStateEvent>); + + @override + _i3.Stream<_i2.Event> get onProgress => (super.noSuchMethod( + Invocation.getter(#onProgress), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onRateChange => (super.noSuchMethod( + Invocation.getter(#onRateChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onReset => (super.noSuchMethod( + Invocation.getter(#onReset), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onResize => (super.noSuchMethod( + Invocation.getter(#onResize), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onScroll => (super.noSuchMethod( + Invocation.getter(#onScroll), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onSearch => (super.noSuchMethod( + Invocation.getter(#onSearch), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onSeeked => (super.noSuchMethod( + Invocation.getter(#onSeeked), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onSeeking => (super.noSuchMethod( + Invocation.getter(#onSeeking), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onSelect => (super.noSuchMethod( + Invocation.getter(#onSelect), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onStalled => (super.noSuchMethod( + Invocation.getter(#onStalled), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.StorageEvent> get onStorage => (super.noSuchMethod( + Invocation.getter(#onStorage), + returnValue: _i3.Stream<_i2.StorageEvent>.empty(), + ) as _i3.Stream<_i2.StorageEvent>); + + @override + _i3.Stream<_i2.Event> get onSubmit => (super.noSuchMethod( + Invocation.getter(#onSubmit), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onSuspend => (super.noSuchMethod( + Invocation.getter(#onSuspend), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onTimeUpdate => (super.noSuchMethod( + Invocation.getter(#onTimeUpdate), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.TouchEvent> get onTouchCancel => (super.noSuchMethod( + Invocation.getter(#onTouchCancel), + returnValue: _i3.Stream<_i2.TouchEvent>.empty(), + ) as _i3.Stream<_i2.TouchEvent>); + + @override + _i3.Stream<_i2.TouchEvent> get onTouchEnd => (super.noSuchMethod( + Invocation.getter(#onTouchEnd), + returnValue: _i3.Stream<_i2.TouchEvent>.empty(), + ) as _i3.Stream<_i2.TouchEvent>); + + @override + _i3.Stream<_i2.TouchEvent> get onTouchMove => (super.noSuchMethod( + Invocation.getter(#onTouchMove), + returnValue: _i3.Stream<_i2.TouchEvent>.empty(), + ) as _i3.Stream<_i2.TouchEvent>); + + @override + _i3.Stream<_i2.TouchEvent> get onTouchStart => (super.noSuchMethod( + Invocation.getter(#onTouchStart), + returnValue: _i3.Stream<_i2.TouchEvent>.empty(), + ) as _i3.Stream<_i2.TouchEvent>); + + @override + _i3.Stream<_i2.TransitionEvent> get onTransitionEnd => (super.noSuchMethod( + Invocation.getter(#onTransitionEnd), + returnValue: _i3.Stream<_i2.TransitionEvent>.empty(), + ) as _i3.Stream<_i2.TransitionEvent>); + + @override + _i3.Stream<_i2.Event> get onUnload => (super.noSuchMethod( + Invocation.getter(#onUnload), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onVolumeChange => (super.noSuchMethod( + Invocation.getter(#onVolumeChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.Event> get onWaiting => (super.noSuchMethod( + Invocation.getter(#onWaiting), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.AnimationEvent> get onAnimationEnd => (super.noSuchMethod( + Invocation.getter(#onAnimationEnd), + returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), + ) as _i3.Stream<_i2.AnimationEvent>); + + @override + _i3.Stream<_i2.AnimationEvent> get onAnimationIteration => + (super.noSuchMethod( + Invocation.getter(#onAnimationIteration), + returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), + ) as _i3.Stream<_i2.AnimationEvent>); + + @override + _i3.Stream<_i2.AnimationEvent> get onAnimationStart => (super.noSuchMethod( + Invocation.getter(#onAnimationStart), + returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), + ) as _i3.Stream<_i2.AnimationEvent>); + + @override + _i3.Stream<_i2.Event> get onBeforeUnload => (super.noSuchMethod( + Invocation.getter(#onBeforeUnload), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + + @override + _i3.Stream<_i2.WheelEvent> get onWheel => (super.noSuchMethod( + Invocation.getter(#onWheel), + returnValue: _i3.Stream<_i2.WheelEvent>.empty(), + ) as _i3.Stream<_i2.WheelEvent>); + + @override + int get pageXOffset => (super.noSuchMethod( + Invocation.getter(#pageXOffset), + returnValue: 0, + ) as int); + + @override + int get pageYOffset => (super.noSuchMethod( + Invocation.getter(#pageYOffset), + returnValue: 0, + ) as int); + + @override + int get scrollX => (super.noSuchMethod( + Invocation.getter(#scrollX), + returnValue: 0, + ) as int); + + @override + int get scrollY => (super.noSuchMethod( + Invocation.getter(#scrollY), + returnValue: 0, + ) as int); + + @override + _i2.Events get on => (super.noSuchMethod( + Invocation.getter(#on), + returnValue: _FakeEvents_7( + this, + Invocation.getter(#on), + ), + ) as _i2.Events); + + @override + _i2.WindowBase open( + String? url, + String? name, [ + String? options, + ]) => + (super.noSuchMethod( + Invocation.method( + #open, + [ + url, + name, + options, + ], + ), + returnValue: _FakeWindowBase_8( + this, + Invocation.method( + #open, + [ + url, + name, + options, + ], + ), + ), + ) as _i2.WindowBase); + + @override + int requestAnimationFrame(_i2.FrameRequestCallback? callback) => + (super.noSuchMethod( + Invocation.method( + #requestAnimationFrame, + [callback], + ), + returnValue: 0, + ) as int); + + @override + void cancelAnimationFrame(int? id) => super.noSuchMethod( + Invocation.method( + #cancelAnimationFrame, + [id], + ), + returnValueForMissingStub: null, + ); + + @override + _i3.Future<_i2.FileSystem> requestFileSystem( + int? size, { + bool? persistent = false, + }) => + (super.noSuchMethod( + Invocation.method( + #requestFileSystem, + [size], + {#persistent: persistent}, + ), + returnValue: _i3.Future<_i2.FileSystem>.value(_FakeFileSystem_9( + this, + Invocation.method( + #requestFileSystem, + [size], + {#persistent: persistent}, + ), + )), + ) as _i3.Future<_i2.FileSystem>); + + @override + void alert([String? message]) => super.noSuchMethod( + Invocation.method( + #alert, + [message], + ), + returnValueForMissingStub: null, + ); + + @override + void cancelIdleCallback(int? handle) => super.noSuchMethod( + Invocation.method( + #cancelIdleCallback, + [handle], + ), + returnValueForMissingStub: null, + ); + + @override + void close() => super.noSuchMethod( + Invocation.method( + #close, + [], + ), + returnValueForMissingStub: null, + ); + + @override + bool confirm([String? message]) => (super.noSuchMethod( + Invocation.method( + #confirm, + [message], + ), + returnValue: false, + ) as bool); + + @override + _i3.Future fetch( + dynamic input, [ + Map? init, + ]) => + (super.noSuchMethod( + Invocation.method( + #fetch, + [ + input, + init, + ], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + + @override + bool find( + String? string, + bool? caseSensitive, + bool? backwards, + bool? wrap, + bool? wholeWord, + bool? searchInFrames, + bool? showDialog, + ) => + (super.noSuchMethod( + Invocation.method( + #find, + [ + string, + caseSensitive, + backwards, + wrap, + wholeWord, + searchInFrames, + showDialog, + ], + ), + returnValue: false, + ) as bool); + + @override + _i2.StylePropertyMapReadonly getComputedStyleMap( + _i2.Element? element, + String? pseudoElement, + ) => + (super.noSuchMethod( + Invocation.method( + #getComputedStyleMap, + [ + element, + pseudoElement, + ], + ), + returnValue: _FakeStylePropertyMapReadonly_10( + this, + Invocation.method( + #getComputedStyleMap, + [ + element, + pseudoElement, + ], + ), + ), + ) as _i2.StylePropertyMapReadonly); + + @override + List<_i2.CssRule> getMatchedCssRules( + _i2.Element? element, + String? pseudoElement, + ) => + (super.noSuchMethod( + Invocation.method( + #getMatchedCssRules, + [ + element, + pseudoElement, + ], + ), + returnValue: <_i2.CssRule>[], + ) as List<_i2.CssRule>); + + @override + _i2.MediaQueryList matchMedia(String? query) => (super.noSuchMethod( + Invocation.method( + #matchMedia, + [query], + ), + returnValue: _FakeMediaQueryList_11( + this, + Invocation.method( + #matchMedia, + [query], + ), + ), + ) as _i2.MediaQueryList); + + @override + void moveBy( + int? x, + int? y, + ) => + super.noSuchMethod( + Invocation.method( + #moveBy, + [ + x, + y, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void postMessage( + dynamic message, + String? targetOrigin, [ + List? transfer, + ]) => + super.noSuchMethod( + Invocation.method( + #postMessage, + [ + message, + targetOrigin, + transfer, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void print() => super.noSuchMethod( + Invocation.method( + #print, + [], + ), + returnValueForMissingStub: null, + ); + + @override + int requestIdleCallback( + _i2.IdleRequestCallback? callback, [ + Map? options, + ]) => + (super.noSuchMethod( + Invocation.method( + #requestIdleCallback, + [ + callback, + options, + ], + ), + returnValue: 0, + ) as int); + + @override + void resizeBy( + int? x, + int? y, + ) => + super.noSuchMethod( + Invocation.method( + #resizeBy, + [ + x, + y, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void resizeTo( + int? x, + int? y, + ) => + super.noSuchMethod( + Invocation.method( + #resizeTo, + [ + x, + y, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void scroll([ + dynamic options_OR_x, + dynamic y, + Map? scrollOptions, + ]) => + super.noSuchMethod( + Invocation.method( + #scroll, + [ + options_OR_x, + y, + scrollOptions, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void scrollBy([ + dynamic options_OR_x, + dynamic y, + Map? scrollOptions, + ]) => + super.noSuchMethod( + Invocation.method( + #scrollBy, + [ + options_OR_x, + y, + scrollOptions, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void scrollTo([ + dynamic options_OR_x, + dynamic y, + Map? scrollOptions, + ]) => + super.noSuchMethod( + Invocation.method( + #scrollTo, + [ + options_OR_x, + y, + scrollOptions, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void stop() => super.noSuchMethod( + Invocation.method( + #stop, + [], + ), + returnValueForMissingStub: null, + ); + + @override + _i3.Future<_i2.Entry> resolveLocalFileSystemUrl(String? url) => + (super.noSuchMethod( + Invocation.method( + #resolveLocalFileSystemUrl, + [url], + ), + returnValue: _i3.Future<_i2.Entry>.value(_FakeEntry_12( + this, + Invocation.method( + #resolveLocalFileSystemUrl, + [url], + ), + )), + ) as _i3.Future<_i2.Entry>); + + @override + String atob(String? atob) => (super.noSuchMethod( + Invocation.method( + #atob, + [atob], + ), + returnValue: '', + ) as String); + + @override + String btoa(String? btoa) => (super.noSuchMethod( + Invocation.method( + #btoa, + [btoa], + ), + returnValue: '', + ) as String); + + @override + void moveTo(_i4.Point? p) => super.noSuchMethod( + Invocation.method( + #moveTo, + [p], + ), + returnValueForMissingStub: null, + ); + + @override + void addEventListener( + String? type, + _i2.EventListener? listener, [ + bool? useCapture, + ]) => + super.noSuchMethod( + Invocation.method( + #addEventListener, + [ + type, + listener, + useCapture, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void removeEventListener( + String? type, + _i2.EventListener? listener, [ + bool? useCapture, + ]) => + super.noSuchMethod( + Invocation.method( + #removeEventListener, + [ + type, + listener, + useCapture, + ], + ), + returnValueForMissingStub: null, + ); + + @override + bool dispatchEvent(_i2.Event? event) => (super.noSuchMethod( + Invocation.method( + #dispatchEvent, + [event], + ), + returnValue: false, + ) as bool); } /// A class which mocks [Navigator]. @@ -35,4 +1292,221 @@ class MockNavigator extends _i1.Mock implements _i2.Navigator { MockNavigator() { _i1.throwOnMissingStub(this); } + + @override + String get language => (super.noSuchMethod( + Invocation.getter(#language), + returnValue: '', + ) as String); + + @override + _i2.Geolocation get geolocation => (super.noSuchMethod( + Invocation.getter(#geolocation), + returnValue: _FakeGeolocation_13( + this, + Invocation.getter(#geolocation), + ), + ) as _i2.Geolocation); + + @override + String get vendor => (super.noSuchMethod( + Invocation.getter(#vendor), + returnValue: '', + ) as String); + + @override + String get vendorSub => (super.noSuchMethod( + Invocation.getter(#vendorSub), + returnValue: '', + ) as String); + + @override + String get appCodeName => (super.noSuchMethod( + Invocation.getter(#appCodeName), + returnValue: '', + ) as String); + + @override + String get appName => (super.noSuchMethod( + Invocation.getter(#appName), + returnValue: '', + ) as String); + + @override + String get appVersion => (super.noSuchMethod( + Invocation.getter(#appVersion), + returnValue: '', + ) as String); + + @override + String get product => (super.noSuchMethod( + Invocation.getter(#product), + returnValue: '', + ) as String); + + @override + String get userAgent => (super.noSuchMethod( + Invocation.getter(#userAgent), + returnValue: '', + ) as String); + + @override + List<_i2.Gamepad?> getGamepads() => (super.noSuchMethod( + Invocation.method( + #getGamepads, + [], + ), + returnValue: <_i2.Gamepad?>[], + ) as List<_i2.Gamepad?>); + + @override + _i3.Future<_i2.MediaStream> getUserMedia({ + dynamic audio = false, + dynamic video = false, + }) => + (super.noSuchMethod( + Invocation.method( + #getUserMedia, + [], + { + #audio: audio, + #video: video, + }, + ), + returnValue: _i3.Future<_i2.MediaStream>.value(_FakeMediaStream_14( + this, + Invocation.method( + #getUserMedia, + [], + { + #audio: audio, + #video: video, + }, + ), + )), + ) as _i3.Future<_i2.MediaStream>); + + @override + void cancelKeyboardLock() => super.noSuchMethod( + Invocation.method( + #cancelKeyboardLock, + [], + ), + returnValueForMissingStub: null, + ); + + @override + _i3.Future getBattery() => (super.noSuchMethod( + Invocation.method( + #getBattery, + [], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + + @override + _i3.Future<_i2.RelatedApplication> getInstalledRelatedApps() => + (super.noSuchMethod( + Invocation.method( + #getInstalledRelatedApps, + [], + ), + returnValue: + _i3.Future<_i2.RelatedApplication>.value(_FakeRelatedApplication_15( + this, + Invocation.method( + #getInstalledRelatedApps, + [], + ), + )), + ) as _i3.Future<_i2.RelatedApplication>); + + @override + _i3.Future getVRDisplays() => (super.noSuchMethod( + Invocation.method( + #getVRDisplays, + [], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + + @override + void registerProtocolHandler( + String? scheme, + String? url, + String? title, + ) => + super.noSuchMethod( + Invocation.method( + #registerProtocolHandler, + [ + scheme, + url, + title, + ], + ), + returnValueForMissingStub: null, + ); + + @override + _i3.Future requestKeyboardLock([List? keyCodes]) => + (super.noSuchMethod( + Invocation.method( + #requestKeyboardLock, + [keyCodes], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + + @override + _i3.Future requestMidiAccess([Map? options]) => + (super.noSuchMethod( + Invocation.method( + #requestMidiAccess, + [options], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + + @override + _i3.Future requestMediaKeySystemAccess( + String? keySystem, + List>? supportedConfigurations, + ) => + (super.noSuchMethod( + Invocation.method( + #requestMediaKeySystemAccess, + [ + keySystem, + supportedConfigurations, + ], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + + @override + bool sendBeacon( + String? url, + Object? data, + ) => + (super.noSuchMethod( + Invocation.method( + #sendBeacon, + [ + url, + data, + ], + ), + returnValue: false, + ) as bool); + + @override + _i3.Future share([Map? data]) => + (super.noSuchMethod( + Invocation.method( + #share, + [data], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); } diff --git a/packages/url_launcher/url_launcher_web/example/pubspec.yaml b/packages/url_launcher/url_launcher_web/example/pubspec.yaml index 4410f83ab08..d0964233150 100644 --- a/packages/url_launcher/url_launcher_web/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/example/pubspec.yaml @@ -19,4 +19,3 @@ dev_dependencies: url_launcher_platform_interface: ^2.2.0 url_launcher_web: path: ../ - web: '>=0.3.0 <0.5.0' diff --git a/packages/url_launcher/url_launcher_web/lib/src/link.dart b/packages/url_launcher/url_launcher_web/lib/src/link.dart index b2217fafb80..b1589ba8899 100644 --- a/packages/url_launcher/url_launcher_web/lib/src/link.dart +++ b/packages/url_launcher/url_launcher_web/lib/src/link.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'dart:async'; +import 'dart:html' as html; import 'dart:js_util'; import 'dart:ui_web' as ui_web; @@ -12,7 +13,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:url_launcher_platform_interface/link.dart'; -import 'package:web/helpers.dart' as html; /// The unique identifier for the view type to be used for link platform views. const String linkViewType = '__url_launcher::link'; @@ -104,11 +104,7 @@ class LinkViewController extends PlatformViewController { if (_instances.isEmpty) { // This is the first controller being created, attach the global click // listener. - - _clickSubscription = - const html.EventStreamProvider('click') - .forTarget(html.window) - .listen(_onGlobalClick); + _clickSubscription = html.window.onClick.listen(_onGlobalClick); } _instances[viewId] = this; } @@ -168,10 +164,10 @@ class LinkViewController extends PlatformViewController { @override final int viewId; - late html.HTMLElement _element; + late html.Element _element; Future _initialize() async { - _element = html.document.createElement('a') as html.HTMLElement; + _element = html.Element.tag('a'); setProperty(_element, linkViewIdProperty, viewId); _element.style ..opacity = '0' diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart index 070852db4c3..0dd1012f708 100644 --- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart +++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart @@ -3,13 +3,13 @@ // found in the LICENSE file. import 'dart:async'; +import 'dart:html' as html; import 'dart:ui_web' as ui_web; import 'package:flutter/foundation.dart' show kDebugMode, visibleForTesting; import 'package:flutter_web_plugins/flutter_web_plugins.dart' show Registrar; import 'package:url_launcher_platform_interface/link.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; -import 'package:web/web.dart' as html; import 'src/link.dart'; @@ -68,7 +68,7 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { /// /// Returns the newly created window. @visibleForTesting - html.Window? openNewWindow(String url, {String? webOnlyWindowName}) { + html.WindowBase? openNewWindow(String url, {String? webOnlyWindowName}) { final String? scheme = _getUrlScheme(url); // Actively disallow opening some schemes, like javascript. // See https://github.com/flutter/flutter/issues/136657 diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 0c3b8ea0821..b70a09439e7 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -2,11 +2,11 @@ name: url_launcher_web description: Web platform implementation of url_launcher repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 -version: 2.2.1 +version: 2.2.0 environment: - sdk: ^3.2.0 - flutter: ">=3.16.0" + sdk: ">=3.1.0 <4.0.0" + flutter: ">=3.13.0" flutter: plugin: @@ -22,7 +22,6 @@ dependencies: flutter_web_plugins: sdk: flutter url_launcher_platform_interface: ^2.2.0 - web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: