diff --git a/packages/connectivity_plus/connectivity_plus/lib/src/connectivity_plus_web.dart b/packages/connectivity_plus/connectivity_plus/lib/src/connectivity_plus_web.dart index 01511c02be..d2f35d5d10 100644 --- a/packages/connectivity_plus/connectivity_plus/lib/src/connectivity_plus_web.dart +++ b/packages/connectivity_plus/connectivity_plus/lib/src/connectivity_plus_web.dart @@ -8,20 +8,6 @@ class ConnectivityPlusWebPlugin extends ConnectivityPlatform { /// Factory method that initializes the connectivity plugin platform with an instance /// of the plugin for the web. static void registerWith(Registrar registrar) { - // Since the `NetworkInformationApi` is currently an experimental API and - // does not provide a reliable way to check a connectivity change - // from an online state to an offline state, - // its implementation is disabled for now. - // See also: https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API - // - // TODO: use `NetworkInformationApiConnectivityPlugin.isSupported()` when it becomes a stable DOM API. - // const isSupported = false; - // if (isSupported) { - // ConnectivityPlatform.instance = NetworkInformationApiConnectivityPlugin(); - // } else { - // ConnectivityPlatform.instance = DartHtmlConnectivityPlugin(); - // } - ConnectivityPlatform.instance = DartHtmlConnectivityPlugin(); } } diff --git a/packages/connectivity_plus/connectivity_plus/lib/src/web/dart_html_connectivity_plugin.dart b/packages/connectivity_plus/connectivity_plus/lib/src/web/dart_html_connectivity_plugin.dart index d5c0c68bf8..b72c91e401 100644 --- a/packages/connectivity_plus/connectivity_plus/lib/src/web/dart_html_connectivity_plugin.dart +++ b/packages/connectivity_plus/connectivity_plus/lib/src/web/dart_html_connectivity_plugin.dart @@ -1,5 +1,9 @@ import 'dart:async'; -import 'dart:html' as html show window; +// Used in web: 0.3.0, deprecated later. +// Remove when increasing min web version. +// ignore: deprecated_member_use +import 'package:web/helpers.dart'; +import 'package:web/web.dart'; import 'package:connectivity_plus_platform_interface/connectivity_plus_platform_interface.dart'; @@ -10,7 +14,7 @@ class DartHtmlConnectivityPlugin extends ConnectivityPlusWebPlugin { /// Checks the connection status of the device. @override Future checkConnectivity() async { - return (html.window.navigator.onLine ?? false) + return (window.navigator.onLine) ? ConnectivityResult.wifi : ConnectivityResult.none; } @@ -22,11 +26,10 @@ class DartHtmlConnectivityPlugin extends ConnectivityPlusWebPlugin { Stream get onConnectivityChanged { if (_connectivityResult == null) { _connectivityResult = StreamController.broadcast(); - // Fallback to dart:html window.onOnline / window.onOffline - html.window.onOnline.listen((event) { + const EventStreamProvider('online').forTarget(window).listen((_) { _connectivityResult!.add(ConnectivityResult.wifi); }); - html.window.onOffline.listen((event) { + const EventStreamProvider('offline').forTarget(window).listen((_) { _connectivityResult!.add(ConnectivityResult.none); }); } diff --git a/packages/connectivity_plus/connectivity_plus/lib/src/web/network_information_api_connectivity_plugin.dart b/packages/connectivity_plus/connectivity_plus/lib/src/web/network_information_api_connectivity_plugin.dart deleted file mode 100644 index bc822a76a6..0000000000 --- a/packages/connectivity_plus/connectivity_plus/lib/src/web/network_information_api_connectivity_plugin.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'dart:async'; -import 'dart:html' as html show window, NetworkInformation; -import 'dart:js_util'; - -import 'package:connectivity_plus/src/web/utils/connectivity_result.dart'; -import 'package:connectivity_plus_platform_interface/connectivity_plus_platform_interface.dart'; -import 'package:flutter/foundation.dart'; -import 'package:js/js.dart'; - -import '../connectivity_plus_web.dart'; - -/// The web implementation of the ConnectivityPlatform of the Connectivity plugin. -class NetworkInformationApiConnectivityPlugin - extends ConnectivityPlusWebPlugin { - final html.NetworkInformation _networkInformation; - - /// A check to determine if this version of the plugin can be used. - static bool isSupported() => html.window.navigator.connection != null; - - /// The constructor of the plugin. - NetworkInformationApiConnectivityPlugin() - : this.withConnection(html.window.navigator.connection!); - - /// Creates the plugin, with an override of the NetworkInformation object. - @visibleForTesting - NetworkInformationApiConnectivityPlugin.withConnection( - html.NetworkInformation connection) - : _networkInformation = connection; - - /// Checks the connection status of the device. - @override - Future checkConnectivity() async { - return networkInformationToConnectivityResult(_networkInformation); - } - - StreamController? _connectivityResultStreamController; - late Stream _connectivityResultStream; - - /// Returns a Stream of ConnectivityResults changes. - @override - Stream get onConnectivityChanged { - // use fallback implementation if [_connectionSupported] is not availible - if (_connectionSupported == null) { - return _webPseudoStream(); - } - if (_connectivityResultStreamController == null) { - _connectivityResultStreamController = - StreamController(); - setProperty(_networkInformation, 'onchange', allowInterop((_) { - _connectivityResultStreamController! - .add(networkInformationToConnectivityResult(_networkInformation)); - })); - // ignore: todo - // TODO: Implement the above with _networkInformation.onChange: - // _networkInformation.onChange.listen((_) { - // _connectivityResult - // .add(networkInformationToConnectivityResult(_networkInformation)); - // }); - // Once we can detect when to *cancel* a subscription to the _networkInformation - // onChange Stream upon hot restart. - // https://github.com/dart-lang/sdk/issues/42679 - _connectivityResultStream = - _connectivityResultStreamController!.stream.asBroadcastStream(); - } - return _connectivityResultStream; - } - - /// stores the last fallback network state - ConnectivityResult? _lastFallbackState; - - /// periodically checks the current network state - Stream _webPseudoStream() { - final StreamController webStream = - StreamController.broadcast(); - Timer.periodic( - const Duration(milliseconds: 250), - (timer) async { - final result = await checkConnectivity(); - if (result != _lastFallbackState) { - webStream.add(result); - } - }, - ); - return webStream.stream; - } -} - -/// accesses the JS-native `navigator.connection` -/// -/// ensures `navigator.connection.onchange` is availible -@JS("navigator.connection") -external get _connectionSupported; diff --git a/packages/connectivity_plus/connectivity_plus/pubspec.yaml b/packages/connectivity_plus/connectivity_plus/pubspec.yaml index 8e04c8569a..6f00e788f4 100644 --- a/packages/connectivity_plus/connectivity_plus/pubspec.yaml +++ b/packages/connectivity_plus/connectivity_plus/pubspec.yaml @@ -6,7 +6,7 @@ repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/ issue_tracker: https://github.com/fluttercommunity/plus_plugins/labels/connectivity_plus environment: - sdk: ">=2.18.0 <4.0.0" + sdk: ">=3.2.0 <4.0.0" flutter: ">=3.3.0" flutter: @@ -33,7 +33,7 @@ dependencies: flutter_web_plugins: sdk: flutter connectivity_plus_platform_interface: ^1.2.4 - js: ^0.6.4 + web: '>=0.3.0 <=0.6.0' meta: ^1.8.0 nm: ^0.5.0