diff --git a/packages/connectivity_plus/connectivity_plus/README.md b/packages/connectivity_plus/connectivity_plus/README.md index 1a4990116d..b97f80d2ab 100644 --- a/packages/connectivity_plus/connectivity_plus/README.md +++ b/packages/connectivity_plus/connectivity_plus/README.md @@ -40,6 +40,11 @@ import 'package:connectivity_plus/connectivity_plus.dart'; final List connectivityResult = await (Connectivity().checkConnectivity()); +// Determines whether any active network connection exists. +if (connectivityResult.hasConnectivity) { + // Connectivity available (regardless of the underlying transport). +} + // This condition is for demo purposes only to explain every connection type. // Use conditions which work for your requirements. if (connectivityResult.contains(ConnectivityResult.mobile)) { diff --git a/packages/connectivity_plus/connectivity_plus/example/lib/main.dart b/packages/connectivity_plus/connectivity_plus/example/lib/main.dart index 29927da5dc..67fc4689b0 100644 --- a/packages/connectivity_plus/connectivity_plus/example/lib/main.dart +++ b/packages/connectivity_plus/connectivity_plus/example/lib/main.dart @@ -101,6 +101,10 @@ class _MyHomePageState extends State { mainAxisSize: MainAxisSize.min, children: [ const Spacer(flex: 2), + Text(_connectionStatus.hasConnectivity + ? 'Connectivity available' + : 'No connectivity'), + const Spacer(flex: 2), Text( 'Active connection types:', style: Theme.of(context).textTheme.headlineMedium, diff --git a/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart b/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart index cef5ddee13..c0cd166259 100644 --- a/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart +++ b/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart @@ -13,6 +13,7 @@ export 'package:connectivity_plus_platform_interface/connectivity_plus_platform_ export 'src/connectivity_plus_linux.dart' if (dart.library.js_interop) 'src/connectivity_plus_web.dart'; +export 'src/enum_extension.dart'; /// Discover network connectivity configurations: Distinguish between WI-FI and cellular, check WI-FI status and more. class Connectivity { @@ -46,7 +47,7 @@ class Connectivity { /// case where [ConnectivityResult.none] is present. /// /// This method applies [Stream.distinct] over the received events to ensure - /// only emiting when connectivity changes. + /// only emitting when connectivity changes. Stream> get onConnectivityChanged { return _platform.onConnectivityChanged.distinct((a, b) => a.equals(b)); } diff --git a/packages/connectivity_plus/connectivity_plus/lib/src/enum_extension.dart b/packages/connectivity_plus/connectivity_plus/lib/src/enum_extension.dart new file mode 100644 index 0000000000..71f5b7c448 --- /dev/null +++ b/packages/connectivity_plus/connectivity_plus/lib/src/enum_extension.dart @@ -0,0 +1,7 @@ +import 'package:connectivity_plus_platform_interface/connectivity_plus_platform_interface.dart'; + +extension ConnectivityResultListX on List { + /// Returns whether any active network connection exists. + bool get hasConnectivity => + !(length == 1 && first == ConnectivityResult.none); +} diff --git a/packages/connectivity_plus/connectivity_plus/test/src/enum_extension_test.dart b/packages/connectivity_plus/connectivity_plus/test/src/enum_extension_test.dart new file mode 100644 index 0000000000..0e6e1799fb --- /dev/null +++ b/packages/connectivity_plus/connectivity_plus/test/src/enum_extension_test.dart @@ -0,0 +1,22 @@ +import 'package:connectivity_plus/connectivity_plus.dart'; +import 'package:test/test.dart'; + +void main() { + group('List<$ConnectivityResult>.hasConnectivity', () { + test('returns false when only none is present', () { + final result = [ConnectivityResult.none]; + expect(result.hasConnectivity, false, reason: 'list: $result'); + }); + + test('returns true when wifi is present', () { + final result = [ConnectivityResult.wifi]; + expect(result.hasConnectivity, true, reason: 'list: $result'); + }); + + test('returns true when multiple connections exist', () { + final result = ConnectivityResult.values.toList() + ..removeWhere((e) => e == ConnectivityResult.none); + expect(result.hasConnectivity, true, reason: 'list: $result'); + }); + }); +}